From 6f241d4d425296badbf6b4f9477fbc3cace5a8fc Mon Sep 17 00:00:00 2001 From: DRC Date: Wed, 16 Mar 2016 07:10:35 -0500 Subject: [PATCH] Add version/build info to global string table This is a common practice in other infrastructure libraries, such as OpenSSL and libpng, because it makes it easy to examine an application binary and determine which version of the library the application was linked against. Closes #66 --- ChangeLog.txt | 6 ++++++ jcmaster.c | 15 ++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index fdb175882..759323925 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -25,6 +25,12 @@ with the -yuv option. [4] Fixed an issue whereby a malformed motion-JPEG frame could cause the "fast path" of libjpeg-turbo's Huffman decoder to read from uninitialized memory. +[5] Added libjpeg-turbo version and build information to the global string +table of the libjpeg and TurboJPEG API libraries. This is a common practice in +other infrastructure libraries, such as OpenSSL and libpng, because it makes it +easy to examine an application binary and determine which version of the +library the application was linked against. + 1.4.2 ===== diff --git a/jcmaster.c b/jcmaster.c index ea13d0d52..dca02d21b 100644 --- a/jcmaster.c +++ b/jcmaster.c @@ -5,7 +5,7 @@ * Copyright (C) 1991-1997, Thomas G. Lane. * Modified 2003-2010 by Guido Vollbeding. * libjpeg-turbo Modifications: - * Copyright (C) 2010, D. R. Commander. + * Copyright (C) 2010, 2016, D. R. Commander. * For conditions of distribution and use, see the accompanying README file. * * This file contains master control logic for the JPEG compressor. @@ -18,6 +18,7 @@ #include "jinclude.h" #include "jpeglib.h" #include "jpegcomp.h" +#include "jconfigint.h" /* Private state */ @@ -37,6 +38,16 @@ typedef struct { int total_passes; /* total # of passes needed */ int scan_number; /* current index in scan_info[] */ + + /* + * This is here so we can add libjpeg-turbo version/build information to the + * global string table without introducing a new global symbol. Adding this + * information to the global string table allows one to examine a binary + * object and determine which version of libjpeg-turbo it was built from or + * linked against. + */ + const char *jpeg_version; + } my_comp_master; typedef my_comp_master * my_master_ptr; @@ -622,4 +633,6 @@ jinit_c_master_control (j_compress_ptr cinfo, boolean transcode_only) master->total_passes = cinfo->num_scans * 2; else master->total_passes = cinfo->num_scans; + + master->jpeg_version = PACKAGE_NAME " version " VERSION " (build " BUILD ")"; }