From owner-p4-projects@FreeBSD.ORG Mon Nov 12 18:58:58 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 18043B2A; Mon, 12 Nov 2012 18:58:58 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id C92C2B28 for ; Mon, 12 Nov 2012 18:58:57 +0000 (UTC) (envelope-from brooks@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id AD9338FC12 for ; Mon, 12 Nov 2012 18:58:57 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.5/8.14.5) with ESMTP id qACIwvUl079674 for ; Mon, 12 Nov 2012 18:58:57 GMT (envelope-from brooks@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.5/8.14.5/Submit) id qACIwvXQ079671 for perforce@freebsd.org; Mon, 12 Nov 2012 18:58:57 GMT (envelope-from brooks@freebsd.org) Date: Mon, 12 Nov 2012 18:58:57 GMT Message-Id: <201211121858.qACIwvXQ079671@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to brooks@freebsd.org using -f From: Brooks Davis Subject: PERFORCE change 219763 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 Nov 2012 18:58:58 -0000 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