summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Christian Hesse <mail@eworm.de>2013-07-11 01:58:42 +0200
committerGravatar Christian Hesse <mail@eworm.de>2013-07-11 01:58:42 +0200
commit8f4ae4338662e8ab26aca95b551756242727d45e (patch)
treeedb4a4f28d9ce37126b7ff0b57a50684e458cd24
parentdfd0d24855ccd75832dc5bcaafa77c60bee150de (diff)
downloadcqrlogo-8f4ae4338662e8ab26aca95b551756242727d45e.tar.gz
cqrlogo-8f4ae4338662e8ab26aca95b551756242727d45e.tar.zst
make scale and border handling more robust
-rw-r--r--config.def.h8
-rw-r--r--cqrlogo.c10
2 files changed, 13 insertions, 5 deletions
diff --git a/config.def.h b/config.def.h
index d95e45d..b54c7a3 100644
--- a/config.def.h
+++ b/config.def.h
@@ -1,9 +1,13 @@
/* pixels are scaled up by this factor */
-#define QRCODE_SCALE 2
+#define QRCODE_SCALE 2
+/* this is the maximum scale factor */
+#define QRCODE_MAX_SCALE 8
/* width of the border
* this is defined to at least 4, but works well with less */
-# define QRCODE_BORDER 1
+# define QRCODE_BORDER 1
+/* this is the maximum border width */
+# define QRCODE_MAX_BORDER 8
/* error correction level used for QR code
* possible values: QR_ECLEVEL_L (lowest, about 7% error can be corrected)
diff --git a/cqrlogo.c b/cqrlogo.c
index 52d216d..fa0e865 100644
--- a/cqrlogo.c
+++ b/cqrlogo.c
@@ -168,7 +168,7 @@ int main(int argc, char **argv) {
struct bitmap_t * bitmap;
char *match = NULL;
- int scale = QRCODE_SCALE, border = QRCODE_BORDER;
+ unsigned int scale = QRCODE_SCALE, border = QRCODE_BORDER;
/* get query string for later use */
char * query_string = getenv("QUERY_STRING");
@@ -204,11 +204,15 @@ int main(int argc, char **argv) {
if (query_string ) {
/* do we have a special scale? */
if ((match = strstr(query_string, "scale=")) != NULL)
- sscanf(match, "scale=%u", &scale);
+ if ((sscanf(match, "scale=%u", &scale)) > 0)
+ if (scale < 1 || scale > QRCODE_MAX_SCALE)
+ scale = QRCODE_SCALE;
/* width of the border? */
if ((match = strstr(query_string, "border=")) != NULL)
- sscanf(match, "border=%u", &border);
+ if ((sscanf(match, "border=%u", &border)) > 0)
+ if (border > QRCODE_MAX_BORDER)
+ border = QRCODE_BORDER;
}
if ((bitmap = encode_qrcode(http_referer, scale, border)) == NULL) {