|
|
05555b |
diff -up libzip-0.10/lib/zip_close.c.php libzip-0.10/lib/zip_close.c
|
|
|
05555b |
--- libzip-0.10/lib/zip_close.c.php 2011-02-20 09:01:03.000000000 -0500
|
|
|
05555b |
+++ libzip-0.10/lib/zip_close.c 2012-01-25 18:37:04.188136374 -0500
|
|
|
05555b |
@@ -602,13 +602,15 @@ _zip_create_temp_output(struct zip *za,
|
|
|
05555b |
char *temp;
|
|
|
05555b |
int tfd;
|
|
|
05555b |
FILE *tfp;
|
|
|
05555b |
+
|
|
|
05555b |
+ int len = strlen(za->zn) + 8;
|
|
|
05555b |
|
|
|
05555b |
- if ((temp=(char *)malloc(strlen(za->zn)+8)) == NULL) {
|
|
|
05555b |
+ if ((temp=(char *)malloc(len)) == NULL) {
|
|
|
05555b |
_zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
|
|
|
05555b |
return NULL;
|
|
|
05555b |
}
|
|
|
05555b |
|
|
|
05555b |
- sprintf(temp, "%s.XXXXXX", za->zn);
|
|
|
05555b |
+ snprintf(temp, len, "%s.XXXXXX", za->zn);
|
|
|
05555b |
|
|
|
05555b |
if ((tfd=mkstemp(temp)) == -1) {
|
|
|
05555b |
_zip_error_set(&za->error, ZIP_ER_TMPOPEN, errno);
|
|
|
05555b |
diff -up libzip-0.10/lib/zip_fclose.c.php libzip-0.10/lib/zip_fclose.c
|
|
|
05555b |
--- libzip-0.10/lib/zip_fclose.c.php 2010-03-08 07:27:48.000000000 -0500
|
|
|
05555b |
+++ libzip-0.10/lib/zip_fclose.c 2012-01-25 18:36:22.389542215 -0500
|
|
|
05555b |
@@ -47,12 +47,14 @@ zip_fclose(struct zip_file *zf)
|
|
|
05555b |
if (zf->src)
|
|
|
05555b |
zip_source_free(zf->src);
|
|
|
05555b |
|
|
|
05555b |
- for (i=0; i<zf->za->nfile; i++) {
|
|
|
05555b |
- if (zf->za->file[i] == zf) {
|
|
|
05555b |
- zf->za->file[i] = zf->za->file[zf->za->nfile-1];
|
|
|
05555b |
- zf->za->nfile--;
|
|
|
05555b |
- break;
|
|
|
05555b |
- }
|
|
|
05555b |
+ if (zf->za) {
|
|
|
05555b |
+ for (i=0; i<zf->za->nfile; i++) {
|
|
|
05555b |
+ if (zf->za->file[i] == zf) {
|
|
|
05555b |
+ zf->za->file[i] = zf->za->file[zf->za->nfile-1];
|
|
|
05555b |
+ zf->za->nfile--;
|
|
|
05555b |
+ break;
|
|
|
05555b |
+ }
|
|
|
05555b |
+ }
|
|
|
05555b |
}
|
|
|
05555b |
|
|
|
05555b |
ret = 0;
|
|
|
05555b |
diff -up libzip-0.10/lib/zip.h.php libzip-0.10/lib/zip.h
|
|
|
05555b |
--- libzip-0.10/lib/zip.h.php 2011-03-04 12:17:43.000000000 -0500
|
|
|
05555b |
+++ libzip-0.10/lib/zip.h 2012-01-25 18:36:22.389542215 -0500
|
|
|
05555b |
@@ -59,7 +59,7 @@ extern "C" {
|
|
|
05555b |
#define ZIP_CREATE 1
|
|
|
05555b |
#define ZIP_EXCL 2
|
|
|
05555b |
#define ZIP_CHECKCONS 4
|
|
|
05555b |
-
|
|
|
05555b |
+#define ZIP_OVERWRITE 8
|
|
|
05555b |
|
|
|
05555b |
/* flags for zip_name_locate, zip_fopen, zip_stat, ... */
|
|
|
05555b |
|
|
|
05555b |
diff -up libzip-0.10/lib/zip_open.c.php libzip-0.10/lib/zip_open.c
|
|
|
05555b |
--- libzip-0.10/lib/zip_open.c.php 2011-03-16 07:18:44.000000000 -0400
|
|
|
05555b |
+++ libzip-0.10/lib/zip_open.c 2012-01-25 18:36:22.389542215 -0500
|
|
|
05555b |
@@ -61,10 +61,16 @@ ZIP_EXTERN struct zip *
|
|
|
05555b |
zip_open(const char *fn, int flags, int *zep)
|
|
|
05555b |
{
|
|
|
05555b |
FILE *fp;
|
|
|
05555b |
+
|
|
|
05555b |
+ if (flags & ZIP_OVERWRITE) {
|
|
|
05555b |
+ return _zip_allocate_new(fn, zep);
|
|
|
05555b |
+ }
|
|
|
05555b |
|
|
|
05555b |
switch (_zip_file_exists(fn, flags, zep)) {
|
|
|
05555b |
case -1:
|
|
|
05555b |
- return NULL;
|
|
|
05555b |
+ if (!(flags & ZIP_OVERWRITE)) {
|
|
|
05555b |
+ return NULL;
|
|
|
05555b |
+ }
|
|
|
05555b |
case 0:
|
|
|
05555b |
return _zip_allocate_new(fn, zep);
|
|
|
05555b |
default:
|
|
|
05555b |
@@ -482,7 +488,7 @@ _zip_file_exists(const char *fn, int fla
|
|
|
05555b |
}
|
|
|
05555b |
|
|
|
05555b |
if (stat(fn, &st) != 0) {
|
|
|
05555b |
- if (flags & ZIP_CREATE)
|
|
|
05555b |
+ if (flags & ZIP_CREATE || flags & ZIP_OVERWRITE)
|
|
|
05555b |
return 0;
|
|
|
05555b |
else {
|
|
|
05555b |
set_error(zep, NULL, ZIP_ER_OPEN);
|