Accepting request 91368 from graphics

- Open all file descriptors with O_CLOEXEC, extended description
  in the patch file.

OBS-URL: https://build.opensuse.org/request/show/91368
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/libjpeg-turbo?expand=0&rev=9
This commit is contained in:
Stephan Kulow 2011-11-16 16:18:55 +00:00 committed by Git OBS Bridge
commit 604fd92534
3 changed files with 109 additions and 4 deletions

94
libjpeg-ocloexec.patch Normal file
View File

@ -0,0 +1,94 @@
This patch causes libjpeg to open all files with O_CLOEXEC
the "e" fopen mode is a glibc/linux specific feature hence
not suitable for other OS.
Note that it is NOT HANDLED GRACEFULLY on kernels older than
2.6.23 or glibc < 2.7.x and WILL segfault.
The other alternative, using fcntl with FD_CLOEXEC is NOT
enough to prevent race conditions.
--- wrjpgcom.c.orig
+++ wrjpgcom.c
@@ -35,15 +35,15 @@ extern void * malloc ();
#endif
#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */
-#define READ_BINARY "r"
-#define WRITE_BINARY "w"
+#define READ_BINARY "re"
+#define WRITE_BINARY "we"
#else
#ifdef VMS /* VMS is very nonstandard */
#define READ_BINARY "rb", "ctx=stm"
#define WRITE_BINARY "wb", "ctx=stm"
#else /* standard ANSI-compliant case */
-#define READ_BINARY "rb"
-#define WRITE_BINARY "wb"
+#define READ_BINARY "rbe"
+#define WRITE_BINARY "wbe"
#endif
#endif
@@ -439,7 +439,7 @@ main (int argc, char **argv)
keep_COM = 0;
} else if (keymatch(arg, "cfile", 2)) {
if (++argn >= argc) usage();
- if ((comment_file = fopen(argv[argn], "r")) == NULL) {
+ if ((comment_file = fopen(argv[argn], READ_BINARY)) == NULL) {
fprintf(stderr, "%s: can't open %s\n", progname, argv[argn]);
exit(EXIT_FAILURE);
}
--- cdjpeg.h.orig
+++ cdjpeg.h
@@ -156,15 +156,15 @@ EXTERN(FILE *) write_stdout JPP((void));
/* miscellaneous useful macros */
#ifdef DONT_USE_B_MODE /* define mode parameters for fopen() */
-#define READ_BINARY "r"
-#define WRITE_BINARY "w"
+#define READ_BINARY "re"
+#define WRITE_BINARY "we"
#else
#ifdef VMS /* VMS is very nonstandard */
#define READ_BINARY "rb", "ctx=stm"
#define WRITE_BINARY "wb", "ctx=stm"
#else /* standard ANSI-compliant case */
-#define READ_BINARY "rb"
-#define WRITE_BINARY "wb"
+#define READ_BINARY "rbe"
+#define WRITE_BINARY "wbe"
#endif
#endif
--- rdswitch.c.orig
+++ rdswitch.c
@@ -92,7 +92,7 @@ read_quant_tables (j_compress_ptr cinfo,
long val;
unsigned int table[DCTSIZE2];
- if ((fp = fopen(filename, "r")) == NULL) {
+ if ((fp = fopen(filename, READ_BINARY)) == NULL) {
fprintf(stderr, "Can't open table file %s\n", filename);
return FALSE;
}
@@ -190,7 +190,7 @@ read_scan_script (j_compress_ptr cinfo,
#define MAX_SCANS 100 /* quite arbitrary limit */
jpeg_scan_info scans[MAX_SCANS];
- if ((fp = fopen(filename, "r")) == NULL) {
+ if ((fp = fopen(filename, READ_BINARY)) == NULL) {
fprintf(stderr, "Can't open scan definition file %s\n", filename);
return FALSE;
}
--- bmp.c.orig
+++ bmp.c
@@ -257,7 +257,7 @@ int saveppm(char *filename, unsigned cha
FILE *fs=NULL; int retcode=0;
unsigned char *tempbuf=NULL;
- if((fs=fopen(filename, "wb"))==NULL) _throw(strerror(errno));
+ if((fs=fopen(filename, "wbe"))==NULL) _throw(strerror(errno));
if(fprintf(fs, "P6\n")<1) _throw("Write error");
if(fprintf(fs, "%d %d\n", w, h)<1) _throw("Write error");
if(fprintf(fs, "255\n")<1) _throw("Write error");

View File

@ -1,3 +1,9 @@
-------------------------------------------------------------------
Sat Nov 12 22:54:58 UTC 2011 - crrodriguez@opensuse.org
- Open all file descriptors with O_CLOEXEC, extended description
in the patch file.
-------------------------------------------------------------------
Thu May 19 14:44:56 CEST 2011 - pgajdos@suse.cz

View File

@ -1,7 +1,7 @@
#
# spec file for package jpeg-turbo
# spec file for package libjpeg-turbo
#
# Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany.
# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@ -33,7 +33,7 @@ Version: %{srcver}
Release: 1
Summary: A MMX/SSE2 accelerated library for manipulating JPEG image files
Url: http://sourceforge.net/projects/libjpeg-turbo
BuildRequires: nasm gcc-c++
BuildRequires: gcc-c++ nasm
Provides: jpeg = %{version}
Obsoletes: jpeg
Conflicts: jpeg%{major}
@ -41,6 +41,7 @@ Source0: %{name}-%{version}.tar.bz2
Source1: baselibs.conf
Patch0: %{name}-%{version}-int32.patch
Patch1: %{name}-%{version}-tiff-ojpeg.patch
Patch2: libjpeg-ocloexec.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%description
@ -49,10 +50,11 @@ JPEG images.
%package -n libjpeg%{major}
License: BSD3c(or similar)
Summary: The MMX/SSE accelerated JPEG compression/decompression library
Version: %{libver}
Provides: libjpeg6 = %{version}
Obsoletes: libjpeg6
Group: System/Libraries
@ -77,6 +79,8 @@ Authors:
License: BSD3c(or similar)
Summary: Development Tools for applications which will use the Libjpeg Library
Version: %{libver}
Group: Development/Libraries/C and C++
Requires: libjpeg%{major} = %{version}
Provides: libjpeg-devel = %{version}
@ -99,6 +103,7 @@ files using the libjpeg library.
%setup -q
%patch0
%patch1
%patch2
%build
autoreconf -fiv