* lib/zip_source_*: Verify user-supplied data.
--HG--
branch : HEAD
diff --git a/lib/zip_source_data.c b/lib/zip_source_data.c
index 2ed3669..56bf512 100644
--- a/lib/zip_source_data.c
+++ b/lib/zip_source_data.c
@@ -1,5 +1,5 @@
/*
- $NiH: zip_source_data.c,v 1.17 2004/11/17 21:55:13 wiz Exp $
+ $NiH: zip_source_data.c,v 1.1 2004/11/18 15:06:23 wiz Exp $
zip_source_data.c -- create zip data source from buffer
Copyright (C) 1999, 2003, 2004 Dieter Baron and Thomas Klausner
@@ -58,6 +58,9 @@
struct read_data *f;
struct zip_source *zs;
+ if (za == NULL)
+ return NULL;
+
if (len < 0 || (data == NULL && len > 0)) {
_zip_error_set(&za->error, ZIP_ER_INVAL, 0);
return NULL;
diff --git a/lib/zip_source_file.c b/lib/zip_source_file.c
index 52b86bb..8715625 100644
--- a/lib/zip_source_file.c
+++ b/lib/zip_source_file.c
@@ -1,5 +1,5 @@
/*
- $NiH: zip_source_file.c,v 1.14 2004/11/17 21:55:13 wiz Exp $
+ $NiH: zip_source_file.c,v 1.1 2004/11/18 15:06:23 wiz Exp $
zip_source_file.c -- create data source from file
Copyright (C) 1999, 2003, 2004 Dieter Baron and Thomas Klausner
@@ -49,6 +49,14 @@
struct zip_source *zs;
FILE *fp;
+ if (za == NULL)
+ return NULL;
+
+ if (fname == NULL || start < 0 || len < -1) {
+ _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return NULL;
+ }
+
if ((fp=fopen(fname, "rb")) == NULL) {
_zip_error_set(&za->error, ZIP_ER_OPEN, errno);
return NULL;
diff --git a/lib/zip_source_filep.c b/lib/zip_source_filep.c
index 8ebfb3a..71d03b9 100644
--- a/lib/zip_source_filep.c
+++ b/lib/zip_source_filep.c
@@ -1,5 +1,5 @@
/*
- $NiH: zip_source_filep.c,v 1.12 2004/11/17 21:55:13 wiz Exp $
+ $NiH: zip_source_filep.c,v 1.1 2004/11/18 15:06:24 wiz Exp $
zip_source_filep.c -- create data source from FILE *
Copyright (C) 1999, 2003, 2004 Dieter Baron and Thomas Klausner
@@ -62,6 +62,14 @@
struct read_file *f;
struct zip_source *zs;
+ if (za == NULL)
+ return NULL;
+
+ if (file == NULL || start < 0 || len < -1) {
+ _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return NULL;
+ }
+
if ((f=(struct read_file *)malloc(sizeof(struct read_file))) == NULL) {
_zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
return NULL;
diff --git a/lib/zip_source_function.c b/lib/zip_source_function.c
index 083ecfc..746f9e3 100644
--- a/lib/zip_source_function.c
+++ b/lib/zip_source_function.c
@@ -1,5 +1,5 @@
/*
- $NiH: zip_source_function.c,v 1.17 2004/11/17 21:55:13 wiz Exp $
+ $NiH: zip_source_function.c,v 1.1 2004/11/18 15:06:24 wiz Exp $
zip_source_function.c -- create zip data source from callback function
Copyright (C) 1999, 2003, 2004 Dieter Baron and Thomas Klausner
@@ -47,6 +47,9 @@
{
struct zip_source *zs;
+ if (za == NULL)
+ return NULL;
+
if ((zs=malloc(sizeof(*zs))) == NULL) {
_zip_error_set(&za->error, ZIP_ER_MEMORY, 0);
return NULL;
diff --git a/lib/zip_source_zip.c b/lib/zip_source_zip.c
index f3b23cb..02fc3a0 100644
--- a/lib/zip_source_zip.c
+++ b/lib/zip_source_zip.c
@@ -1,5 +1,5 @@
/*
- $NiH: zip_source_zip.c,v 1.24 2004/11/17 21:55:13 wiz Exp $
+ $NiH: zip_source_zip.c,v 1.1 2004/11/18 15:06:24 wiz Exp $
zip_source_zip.c -- create data source from zip file
Copyright (C) 1999, 2003, 2004 Dieter Baron and Thomas Klausner
@@ -59,6 +59,14 @@
struct zip_source *zs;
struct read_zip *p;
+ if (za == NULL)
+ return NULL;
+
+ if (srcza == NULL || start < 0 || len < -1 || srcidx < 0 || srcidx >= srcza->nentry) {
+ _zip_error_set(&za->error, ZIP_ER_INVAL, 0);
+ return NULL;
+ }
+
if ((flags & ZIP_FL_UNCHANGED) == 0
&& ZIP_ENTRY_DATA_CHANGED(srcza->entry+srcidx)) {
_zip_error_set(&za->error, ZIP_ER_CHANGED, 0);