From 704b4df7d1965090d27e76eba9257e2a29b34595 Mon Sep 17 00:00:00 2001
From: Maximilian Downey Twiss <creatorsmithmdt@gmail.com>
Date: Thu, 24 Nov 2022 19:01:56 +1100
Subject: [PATCH 40/56] java: Fix Wstringop-* warnings.

gcc/java/ChangeLog:

	* jcf-parse.cc (compute_class_name): Fix Wstringop-* warnings.

Co-authored-by: 277r <rick_degraaf@hotmail.nl>
---
 gcc/java/jcf-parse.cc | 23 ++++++++++++++---------
 1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/gcc/java/jcf-parse.cc b/gcc/java/jcf-parse.cc
index 683f7211085..a4ee9af51d2 100644
--- a/gcc/java/jcf-parse.cc
+++ b/gcc/java/jcf-parse.cc
@@ -1992,8 +1992,8 @@ compute_class_name (struct ZipDirectory *zdir)
 {
   char *class_name_in_zip_dir = ZIPDIR_FILENAME (zdir);
   char *class_name;
-  int i;
-  int filename_length = zdir->filename_length;
+  size_t i;
+  size_t filename_length = zdir->filename_length;
 
   while (filename_length > 2 && strncmp (class_name_in_zip_dir, "./", 2) == 0)
     {
@@ -2002,15 +2002,20 @@ compute_class_name (struct ZipDirectory *zdir)
     }
 
   filename_length -= strlen (".class");
-  class_name = XNEWVEC (char, filename_length + 1);
-  memcpy (class_name, class_name_in_zip_dir, filename_length);
-  class_name [filename_length] = '\0';
+  if (filename_length > 0)
+  {
+    class_name = XNEWVEC (char, size_t(filename_length + 1));
+    memcpy (class_name, class_name_in_zip_dir, filename_length);
+    class_name [filename_length] = '\0';
 
-  for (i = 0; i < filename_length; i++)
-    if (class_name[i] == '/')
-      class_name[i] = '.';
+    for (i = 0; i < filename_length; i++)
+      if (class_name[i] == '/')
+        class_name[i] = '.';
 
-  return class_name;
+    return class_name;
+  }
+
+  return 0;
 }
 
 /* Return 0 if we should skip this entry, 1 if it is a .class file, 2
-- 
2.38.1

Reply via email to