OPENAFS-SA-2019-002: Zero all server RPC args
[openafs.git] / src / rxgen / rpc_parse.c
index 4e1b614..768e42f 100644 (file)
@@ -1435,8 +1435,6 @@ ss_ProcSpecial_setup(definition * defp)
                if (streq(string, structname(plist->pl.param_type))) {
                    plist->pl.string_name = spec->sdef.string_name;
                    plist->pl.param_flag |= FREETHIS_PARAM;
-                   fprintf(fout, "\n\t%s.%s = 0;", plist->pl.param_name,
-                           spec->sdef.string_name);
                }
            }
        }
@@ -1451,22 +1449,13 @@ ss_ProcSpecial_setup(definition * defp)
                    case REL_ARRAY:
                        plist->pl.string_name = alloc(40);
                        if (brief_flag) {
-                           f_print(fout, "\n\t%s.val = 0;",
-                                   plist->pl.param_name);
-                           f_print(fout, "\n\t%s.len = 0;",
-                                   plist->pl.param_name);
                            s_print(plist->pl.string_name, "val");
                        } else {
-                           f_print(fout, "\n\t%s.%s_val = 0;",
-                                   plist->pl.param_name, defp1->def_name);
-                           f_print(fout, "\n\t%s.%s_len = 0;",
-                                   plist->pl.param_name, defp1->def_name);
                            s_print(plist->pl.string_name, "%s_val",
                                    defp1->def_name);
                        }
                        break;
                    case REL_POINTER:
-                       f_print(fout, "\n\t%s = 0;", plist->pl.param_name);
                        plist->pl.string_name = NULL;
                        break;
                    default:
@@ -1482,13 +1471,19 @@ ss_ProcSpecial_setup(definition * defp)
            if (plist->component_kind == DEF_PARAM) {
                if (streq(defp1->def_name, structname(plist->pl.param_type))) {
                    plist->pl.param_flag |= FREETHIS_PARAM;
-                   fprintf(fout, "\n\tmemset(&%s, 0, sizeof(%s));",
-                                plist->pl.param_name, defp1->def_name);
                }
            }
        }
     }
 
+    for (plist = defp->pc.plists; plist; plist = plist->next) {
+       if (plist->component_kind == DEF_PARAM) {
+           fprintf(fout, "\n\tmemset(&%s, 0, sizeof(%s));",
+                   plist->pl.param_name,
+                   plist->pl.param_name);
+       }
+    }
+
     f_print(fout, "\n");
 }