]> granicus.if.org Git - php/commitdiff
make sure the string is non-empty and use strlcpy() & strlcat()
authorAntony Dovgal <tony2001@php.net>
Thu, 11 Jan 2007 16:45:27 +0000 (16:45 +0000)
committerAntony Dovgal <tony2001@php.net>
Thu, 11 Jan 2007 16:45:27 +0000 (16:45 +0000)
ext/pgsql/pgsql.c

index 06da2d85c76e25d2416569414f456240f45398b7..4b1da706135efd0a6e6cc72b608012bbd1c20d10 100644 (file)
@@ -3469,10 +3469,11 @@ PHP_FUNCTION(pg_copy_from)
 #if HAVE_PQPUTCOPYDATA
                                while (zend_hash_get_current_data_ex(Z_ARRVAL_P(pg_rows), (void **) &tmp, &pos) == SUCCESS) {
                                        convert_to_string_ex(tmp);
-                                       query = (char *)emalloc(Z_STRLEN_PP(tmp) +2);
-                                       strcpy(query, Z_STRVAL_PP(tmp));
-                                       if(*(query+Z_STRLEN_PP(tmp)-1) != '\n')
-                                               strcat(query, "\n");
+                                       query = (char *)emalloc(Z_STRLEN_PP(tmp) + 2);
+                                       strlcpy(query, Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp) + 2);
+                                       if(Z_STRLEN_PP(tmp) > 0 && *(query + Z_STRLEN_PP(tmp) - 1) != '\n') {
+                                               strlcat(query, "\n", Z_STRLEN_PP(tmp) + 2);
+                                       }
                                        if (PQputCopyData(pgsql, query, strlen(query)) != 1) {
                                                efree(query);
                                                PHP_PQ_ERROR("copy failed: %s", pgsql);
@@ -3488,10 +3489,11 @@ PHP_FUNCTION(pg_copy_from)
 #else
                                while (zend_hash_get_current_data_ex(Z_ARRVAL_P(pg_rows), (void **) &tmp, &pos) == SUCCESS) {
                                        convert_to_string_ex(tmp);
-                                       query = (char *)emalloc(Z_STRLEN_PP(tmp) +2);
-                                       strcpy(query, Z_STRVAL_PP(tmp));
-                                       if(*(query+Z_STRLEN_PP(tmp)-1) != '\n')
-                                               strcat(query, "\n");
+                                       query = (char *)emalloc(Z_STRLEN_PP(tmp) + 2);
+                                       strlcpy(query, Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp) + 2);
+                                       if(Z_STRLEN_PP(tmp) > 0 && *(query + Z_STRLEN_PP(tmp) - 1) != '\n') {
+                                               strlcat(query, "\n", Z_STRLEN_PP(tmp) + 2);
+                                       }
                                        if (PQputline(pgsql, query)==EOF) {
                                                efree(query);
                                                PHP_PQ_ERROR("copy failed: %s", pgsql);