PERFORCE change 164990 for review
David Forsythe
dforsyth at FreeBSD.org
Tue Jun 23 19:53:07 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=164990
Change 164990 by dforsyth at squirrel on 2009/06/23 19:52:40
Duplicate passed strings rather than assuming that the client will
always pass truly constant strings.
Affected files ...
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.h#25 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_cfl.c#4 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_dep.c#5 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_dep.h#5 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_file.c#6 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_file.h#5 edit
.. //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_plist.c#20 edit
Differences ...
==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg.h#25 (text+ko) ====
@@ -53,6 +53,12 @@
#define PARSE_OK 0x00000000
#define PARSE_FAIL 0x10000000
+/* TODO: All these explicit functions are great, but the client doesn't
+ * need to make a "new" pkg_cfl, when all they really have to insert are a
+ * sting and an integer (they dont even have to set the int). So write
+ * some functions that give them ways to make these entities with a single
+ * call. */
+
/* pkg_file */
struct pkg_file;
==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_cfl.c#4 (text+ko) ====
@@ -26,7 +26,8 @@
if (pc == NULL)
arg_rage_quit(__func__, "Not a valid conflict.", RAGE_AT_LIBPKG);
- pc->name = strdup(name);
+ free(pc->name);
+ pc->name = (name == NULL) ? NULL : strdup(name);
return ((pc->name == NULL) ? MEMORY_ERR | NOT_OK : OK);
}
==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_dep.c#5 (text+ko) ====
@@ -1,5 +1,6 @@
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include "pkg_dep.h"
#include "pkg.h"
@@ -20,7 +21,8 @@
if (pd == NULL)
return (NULL);
- pd->name = name;
+ free(pd->name);
+ pd->name = (name != NULL ? strdup(name) : NULL);
return (pd);
}
@@ -30,8 +32,9 @@
{
if (pd == NULL)
return (NULL);
-
- pd->origin = origin;
+
+ free(pd->origin);
+ pd->origin = (origin != NULL ? strdup(origin) : NULL);
return (pd);
}
==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_dep.h#5 (text+ko) ====
@@ -6,8 +6,8 @@
#include <sys/queue.h>
struct pkg_dep {
- const char *name;
- const char *origin;
+ char *name;
+ char *origin;
int version;
==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_file.c#6 (text+ko) ====
@@ -1,5 +1,6 @@
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include "pkg_file.h"
#include "pkg.h"
@@ -70,8 +71,9 @@
{
if (pf == NULL)
return (NOT_OK);
-
- pf->md5 = md5;
+
+ free(pf->md5);
+ pf->md5 = (md5 != NULL ? strdup(md5) : NULL);
return (OK);
}
@@ -80,8 +82,9 @@
{
if (pf == NULL)
return (NOT_OK);
-
- pf->path = path;
+
+ free(pf->path);
+ pf->path = (path != NULL ? strdup(path) : NULL);
return (OK);
}
@@ -91,7 +94,8 @@
if (pf == NULL)
return (NOT_OK);
- pf->owner = owner;
+ free(pf->owner);
+ pf->owner = (owner != NULL ? strdup(owner) : NULL);
return (OK);
}
@@ -100,8 +104,9 @@
{
if (pf == NULL)
return (NOT_OK);
-
- pf->group = group;
+
+ free(pf->group);
+ pf->group = (group != NULL ? strdup(group) : NULL);
return (OK);
}
@@ -110,7 +115,8 @@
{
if (pf == NULL)
return (NOT_OK);
-
- pf->mode = mode;
+
+ free(pf->mode);
+ pf->mode = (mode != NULL ? strdup(mode) : NULL);
return (OK);
}
==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_file.h#5 (text+ko) ====
@@ -6,11 +6,11 @@
#include <sys/queue.h>
struct pkg_file {
- const char *path;
- const char *md5;
- const char *owner;
- const char *group;
- const char *mode;
+ char *path;
+ char *md5;
+ char *owner;
+ char *group;
+ char *mode;
TAILQ_ENTRY(pkg_file) next;
};
==== //depot/projects/soc2009/dforsyth_libpkg/libpkg/pkg_plist.c#20 (text+ko) ====
@@ -118,8 +118,6 @@
textp = strdup(text);
if (textp == NULL)
return (MEMORY_ERR);
- /* Once parsed this is actually a leak because we lose track of the
- * commands. */
pl->text = textp;
@@ -153,7 +151,8 @@
textp = p + 1;
}
}
-
+
+ free(textp);
pl->parsed = 1;
return (OK);
More information about the p4-projects
mailing list