diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index d13425b1316c24445d203bdc1ca18018ca4cdb55..a2357c3e747e7e2a95ec55b1797ac80dd3abe3be 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,9 @@
+2006-01-24  Archit Shah  <ashah@redhat.com>
+	    Tom Tromey  <tromey@redhat.com>
+
+	* prims.cc (next_property_value): Never return NULL.
+	(process_gcj_properties): Copy 'props' before using it.
+
 2006-01-23  Keith Seitz  <keiths@redhat.com>
 
 	* java/lang/Class.h (_Jv_FindInterpreterMethod): Add new declaration.
diff --git a/libjava/prims.cc b/libjava/prims.cc
index 09bca0b6f71f00ad8e737aaae4b60b1817501c26..a968a9b3013f7be844833330518dad63cc96daaa 100644
--- a/libjava/prims.cc
+++ b/libjava/prims.cc
@@ -857,10 +857,6 @@ next_property_value (char *s, size_t *length)
   while (isspace (*s))
     s++;
 
-  // If we've reached the end, return NULL.
-  if (*s == 0)
-    return NULL;
-
   // Determine the length of the property value.
   while (s[l] != 0
 	 && ! isspace (s[l])
@@ -883,13 +879,18 @@ static void
 process_gcj_properties ()
 {
   char *props = getenv("GCJ_PROPERTIES");
-  char *p = props;
-  size_t length;
-  size_t property_count = 0;
 
   if (NULL == props)
     return;
 
+  // Later on we will write \0s into this string.  It is simplest to
+  // just duplicate it here.
+  props = strdup (props);
+
+  char *p = props;
+  size_t length;
+  size_t property_count = 0;
+
   // Whip through props quickly in order to count the number of
   // property values.
   while (p && (p = next_property_key (p, &length)))