summaryrefslogtreecommitdiff
path: root/libgphoto2_port
diff options
context:
space:
mode:
authorMarcus Meissner <marcus@jet.franken.de>2022-09-29 09:54:21 +0200
committerMarcus Meissner <marcus@jet.franken.de>2022-09-29 09:55:38 +0200
commit0c28822d5909f9ff9bc895b5095fcf8c21dac02a (patch)
tree2ea112a3d0bc471f7477de8243e5e627b52308db /libgphoto2_port
parentcd31ed13599898edd26b78ac843dcc0a3adbadec (diff)
downloadlibgphoto2-0c28822d5909f9ff9bc895b5095fcf8c21dac02a.tar.gz
Hide all the fuzzing code behind a ifdef FUZZING
https://github.com/gphoto/libgphoto2/issues/842
Diffstat (limited to 'libgphoto2_port')
-rw-r--r--libgphoto2_port/vusb/vcamera.c10
-rw-r--r--libgphoto2_port/vusb/vcamera.h3
2 files changed, 13 insertions, 0 deletions
diff --git a/libgphoto2_port/vusb/vcamera.c b/libgphoto2_port/vusb/vcamera.c
index 1dc45baaf..849401303 100644
--- a/libgphoto2_port/vusb/vcamera.c
+++ b/libgphoto2_port/vusb/vcamera.c
@@ -1797,6 +1797,7 @@ static int vcam_exit(vcamera* cam) {
}
static int vcam_open(vcamera* cam, const char *port) {
+#ifdef FUZZING
char *s = strchr(port,':');
if (s) {
@@ -1819,15 +1820,18 @@ static int vcam_open(vcamera* cam, const char *port) {
}
*/
}
+#endif
return GP_OK;
}
static int vcam_close(vcamera* cam) {
+#ifdef FUZZING
if (cam->fuzzf) {
fclose (cam->fuzzf);
cam->fuzzf = NULL;
cam->fuzzpending = 0;
}
+#endif
free (cam->inbulk);
free (cam->outbulk);
return GP_OK;
@@ -1935,6 +1939,8 @@ static int
vcam_read(vcamera*cam, int ep, unsigned char *data, int bytes) {
unsigned int toread = bytes;
+#ifdef FUZZING
+ /* here we are not using the virtual ptp camera, but just read from a file, or write to it. */
if (cam->fuzzf) {
unsigned int hasread;
@@ -1985,6 +1991,7 @@ vcam_read(vcamera*cam, int ep, unsigned char *data, int bytes) {
return toread;
}
}
+#endif /* FUZZING */
/* Emulated PTP camera stuff */
@@ -2079,11 +2086,14 @@ vcam_readint(vcamera*cam, unsigned char *data, int bytes, int timeout) {
struct ptp_interrupt *pint;
if (!first_interrupt) {
+#ifdef FUZZING
#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
usleep (timeout*1000);
#endif
+ /* this emulates plugged out devices during fuzzing */
if (cam->fuzzf && feof(cam->fuzzf))
return GP_ERROR_IO;
+#endif /* FUZZING */
return GP_ERROR_TIMEOUT;
}
gettimeofday (&now, NULL);
diff --git a/libgphoto2_port/vusb/vcamera.h b/libgphoto2_port/vusb/vcamera.h
index e15a27f61..ccfce1688 100644
--- a/libgphoto2_port/vusb/vcamera.h
+++ b/libgphoto2_port/vusb/vcamera.h
@@ -22,6 +22,7 @@
#ifndef IOLIBS_VUSB_VCAMERA_H
#define IOLIBS_VUSB_VCAMERA_H
+#undef FUZZING
#undef FUZZ_PTP
#include <stdio.h>
@@ -67,11 +68,13 @@ typedef struct vcamera {
unsigned int shutterspeed;
unsigned int fnumber;
+#ifdef FUZZING
int fuzzmode;
#define FUZZMODE_PROTOCOL 0
#define FUZZMODE_NORMAL 1
FILE* fuzzf;
unsigned int fuzzpending;
+#endif /* FUZZING */
} vcamera;
vcamera *vcamera_new(vcameratype);