Fix _zip_set_name for empty name. Add more test cases to name_locate.test.
diff --git a/TODO b/TODO index 15b4a2c..13d9e8c 100644 --- a/TODO +++ b/TODO
@@ -52,7 +52,6 @@ Bugs ==== -! D name_locate("") fails ! D zip64 extra field not removed from local extra fields (extra_count_ignore_zip64.test) ! D check for off_t overflow ! D fix OpenSUSE i686 regression failures
diff --git a/lib/zip_set_name.c b/lib/zip_set_name.c index dc62c74..bf9801c 100644 --- a/lib/zip_set_name.c +++ b/lib/zip_set_name.c
@@ -89,10 +89,10 @@ e->changes->changed &= ~ZIP_DIRENT_FILENAME; } - if (e->orig && e->orig->filename) + if (e->orig) changed = !_zip_string_equal(e->orig->filename, str); else - changed = (str != NULL); + changed = 1; if (changed) { if (e->changes == NULL) {
diff --git a/regress/name_locate.c b/regress/name_locate.c index 22f3fc0..eb3b9de 100644 --- a/regress/name_locate.c +++ b/regress/name_locate.c
@@ -91,14 +91,20 @@ zip_delete(z, 0); fail += find_fail(z, "test", 0, ZIP_ER_NOENT); fail += find_success(z, "test", ZIP_FL_UNCHANGED); - if ((s=zip_source_buffer(z, buf, sizeof(buf), 0)) == NULL || - zip_file_add(z, "new", s, 0) < 0) { + if ((s=zip_source_buffer(z, buf, sizeof(buf), 0)) == NULL || zip_file_add(z, "new", s, 0) < 0) { zip_source_free(s); printf("error adding file: %s\n", zip_strerror(z)); } fail += find_success(z, "new", 0); + fail += find_fail(z, "new", ZIP_FL_UNCHANGED, ZIP_ER_NOENT); + if ((s=zip_source_buffer(z, buf, sizeof(buf), 0)) == NULL || zip_file_add(z, "", s, 0) < 0) { + zip_source_free(s); + printf("error adding file: %s\n", zip_strerror(z)); + } + fail += find_success(z, "", 0); zip_unchange_all(z); fail += find_success(z, "test", 0); + fail += find_fail(z, "new", 0, ZIP_ER_NOENT); if (zip_close(z) == -1) { fprintf(stderr, "%s: can't close zip archive `%s': %s\n", prg,