Date: Mon, 12 Nov 2012 18:58:57 GMT From: Brooks Davis <brooks@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 219763 for review Message-ID: <201211121858.qACIwvXQ079671@skunkworks.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/@@219763?ac=10 Change 219763 by brooks@brooks_ecr_current on 2012/11/12 18:58:51 Split the common PNG decoding bits out from the sandbox creation. Build the capsicum helper static. Affected files ... .. //depot/projects/ctsrd/cheribsd/src/ctsrd-lib/libimagebox/Makefile#3 edit .. //depot/projects/ctsrd/cheribsd/src/ctsrd-lib/libimagebox/decode_png.c#1 add .. //depot/projects/ctsrd/cheribsd/src/ctsrd-lib/libimagebox/pngbox.c#3 edit .. //depot/projects/ctsrd/cheribsd/src/ctsrd/libexec/readpng/Makefile#3 edit Differences ... ==== //depot/projects/ctsrd/cheribsd/src/ctsrd-lib/libimagebox/Makefile#3 (text+ko) ==== @@ -7,7 +7,7 @@ LIB= imagebox SHLIB_MAJOR= 1 -SRCS= pngbox.c +SRCS= decode_png.c pngbox.c INCS= imagebox.h ==== //depot/projects/ctsrd/cheribsd/src/ctsrd-lib/libimagebox/pngbox.c#3 (text+ko) ==== @@ -47,9 +47,6 @@ #include "imagebox.h" #include "iboxpriv.h" -static void read_row_callback(png_structp, png_uint_32, int); -static void read_png_from_fd(png_structp, png_bytep, png_size_t); - struct pthr_decode_private { pthread_t pthr; @@ -60,84 +57,6 @@ pid_t pid; }; -void -decode_png(struct ibox_decode_state *ids) -{ - int bit_depth, color_type, interlace_type; - png_uint_32 r, width, height; - png_structp png_ptr = NULL; - png_infop info_ptr = NULL; - png_infop end_info = NULL; - png_bytep *rows = NULL; - - if ((png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, - NULL, NULL, NULL)) == NULL) { - ids->is->error = 1; - goto error; - } - if ((info_ptr = png_create_info_struct(png_ptr)) == NULL) { - ids->is->error = 1; - goto error; - } - if ((end_info = png_create_info_struct(png_ptr)) == NULL) { - ids->is->error = 1; - goto error; - } - - if (setjmp(png_jmpbuf(png_ptr))) { - ids->is->error = 1; - goto error; - } - -#if 0 - /* XXX Insert back door function here */ - png_set_read_user_chunk_fn(png_ptr, user_chunk_ptr, - read_chunk_callback); -#endif - - png_set_read_status_fn(png_ptr, read_row_callback); - - /* - * Reject the image if the parser finds a different size than - * our manual parsing did. - */ -#if 0 - png_set_user_limits(png_ptr, width, height); -#endif - - png_set_read_fn(png_ptr, ids, read_png_from_fd); - - png_read_info(png_ptr, info_ptr); - - png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, - &color_type, &interlace_type, NULL, NULL); - - if (width != ids->is->width || height != ids->is->height) { - ids->is->error = 1; - goto error; - } - - png_set_gray_to_rgb(png_ptr); - png_set_bgr(png_ptr); - png_set_filler(png_ptr, 0, PNG_FILLER_AFTER); - ids->is->passes_remaining = png_set_interlace_handling(png_ptr); - png_read_update_info(png_ptr, info_ptr); - - if ((rows = malloc(height*sizeof(png_bytep))) == NULL) - png_error(png_ptr, "failed to malloc row array"); - for (r = 0; r < height; r++) - rows[r] = (png_bytep)(ids->buffer + (width * r)); - - png_read_rows(png_ptr, rows, NULL, height); - - png_read_end(png_ptr, end_info); - -error: - png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); - close(ids->fd); - free(rows); -} - static void * pthr_decode_png(void *arg) { @@ -394,27 +313,3 @@ break; } } - -static void -read_row_callback(png_structp png_ptr, png_uint_32 row, int pass __unused) -{ - struct ibox_decode_state *ids; - - ids = png_get_io_ptr(png_ptr); - if (ids->is->valid_rows < row) - ids->is->valid_rows = row; - if (row == ids->is->height) - ids->is->passes_remaining--; -} - -static void -read_png_from_fd(png_structp png_ptr, png_bytep data, png_size_t length) -{ - struct ibox_decode_state *ids; - ssize_t rlen; - - ids = png_get_io_ptr(png_ptr); - rlen = read(ids->fd, data, length); - if (rlen < 0 || (png_size_t)rlen != length) - png_error(png_ptr, "read error"); -} ==== //depot/projects/ctsrd/cheribsd/src/ctsrd/libexec/readpng/Makefile#3 (text+ko) ==== @@ -4,8 +4,10 @@ PROG= readpng +NO_SHARED= yes + .PATH: ${.CURDIR}/../../../ctsrd-lib/libimagebox -SRCS= readpng.c pngbox.c +SRCS= readpng.c decode_png.c MAN= @@ -14,12 +16,12 @@ CFLAGS+= -I${.CURDIR}/../../../ctsrd-lib/libimagebox .if ${MACHINE_ARCH} == "amd64" CFLAGS+= -I/usr/local/include -LDFLAGS+= -L/usr/local/lib +LDADD+= -L/usr/local/lib -lpng .else CFLAGS+= -I${.CURDIR}/../../libvuln_png -LDFLAGS+= -lvuln_png +LDADD+= -lvuln_png .endif -LDFLAGS+= -lpthread -lz -lm +LDADD+= -lz -lm WARNS= 6
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201211121858.qACIwvXQ079671>