diff liboctave/util/cmd-edit.cc @ 26489:8f425e6ea110 stable

cmd-edit.cc: Fix static analyzer detected issues (bug #55347). * cmd-edit.cc (looks_like_filename): Check pointer 'f' validity before using. * cmd-edit.cc (gnu_readline::command_generator, gnu_readline::command_quoter, gnu_readline::command_dequoter): Check pointer "retval" validity before using. * cmd-edit.cc (gnu_readline::command_completer): Declare and assign "matches" in one statement. * cmd-edit.cc (command_editor::do_decode_prompt_string): Replace final "else if" in if/else if tree with just "else".
author Rik <rik@octave.org>
date Mon, 07 Jan 2019 17:29:54 -0800
parents d41c487e5de2
children 7455523fdf01
line wrap: on
line diff
--- a/liboctave/util/cmd-edit.cc	Mon Jan 07 15:49:30 2019 -0800
+++ b/liboctave/util/cmd-edit.cc	Mon Jan 07 17:29:54 2019 -0800
@@ -529,7 +529,7 @@
         // Remove incomplete component.
         const char *f = strrchr (line, sys::file_ops::dir_sep_char ());
 
-        if (s[1] == '~' || (f && f != s))
+        if (f && (s[1] == '~' || f != s))
           {
             // For something like "A /b", f==s; don't assume a file.
 
@@ -833,7 +833,8 @@
       {
         retval = static_cast<char *> (std::malloc (len+1));
 
-        strcpy (retval, tmp.c_str ());
+        if (retval)
+          strcpy (retval, tmp.c_str ());
       }
 
     return retval;
@@ -854,7 +855,8 @@
       {
         retval = static_cast<char *> (std::malloc (len+1));
 
-        strcpy (retval, tmp.c_str ());
+        if (retval)
+          strcpy (retval, tmp.c_str ());
       }
 
     return retval;
@@ -875,7 +877,8 @@
       {
         retval = static_cast<char *> (std::malloc (len+1));
 
-        strcpy (retval, tmp.c_str ());
+        if (retval)
+          strcpy (retval, tmp.c_str ());
       }
 
     return retval;
@@ -905,9 +908,10 @@
   char **
   gnu_readline::command_completer (const char *text, int, int)
   {
-    char **matches = nullptr;
-    matches
-      = ::octave_rl_completion_matches (text, gnu_readline::command_generator);
+    char **matches =
+      ::octave_rl_completion_matches (text,
+                                      gnu_readline::command_generator);
+
     return matches;
   }
 
@@ -1736,7 +1740,7 @@
                     tmpstr = now.strftime ("%I:%M:%S");
                   else if (c == '@')
                     tmpstr = now.strftime ("%I:%M %p");
-                  else if (c == 'A')
+                  else // (c == 'A')
                     tmpstr = now.strftime ("%H:%M");
 
                   break;