diff --git a/doc/README-XMP b/doc/README-XMP index 78df99e5..57fea6a2 100644 --- a/doc/README-XMP +++ b/doc/README-XMP @@ -48,7 +48,7 @@ XMP Toolkit 4.1.1 (xmp_v411_sdk.zip) from http://www.adobe.com/devnet/xmp/sdk/eula.html The following files were copied from the original XMP SDK -distribution: +distribution, essentially: public/include/* -> xmpsdk/include source/common/* -> xmpsdk/src @@ -60,7 +60,7 @@ third-party/MD5/MD5.cpp -> xmpsdk/src Minor changes were applied to the original XMP SDK, see the SVN for details: - http://dev.robotbattle.com/~cvsuser/cgi-bin/ns_viewcvs.cgi/exiv2/trunk/xmpsdk/ + http://dev.robotbattle.com/cgi-bin/viewvc.cgi/exiv2/trunk/xmpsdk/ License diff --git a/src/convert.cpp b/src/convert.cpp index 2aceefee..bf99c7e6 100644 --- a/src/convert.cpp +++ b/src/convert.cpp @@ -42,6 +42,10 @@ EXIV2_RCSID("@(#) $Id$") #include #include #include +#include // for snprintf (C99) +#ifdef _MSC_VER +# define snprintf _snprintf +#endif // Adobe XMP Toolkit #ifdef EXV_HAVE_XMP_TOOLKIT @@ -571,7 +575,8 @@ namespace Exiv2 { sec = static_cast(dsec); dsec -= sec; - sprintf(buf, "%.9f", dsec); + snprintf(buf, sizeof(buf), "%.9f", dsec); + buf[sizeof(buf) - 1] = 0; subsec = buf + 1; Exiv2::ExifData::iterator datePos = exifData_->findKey(ExifKey("Exif.GPSInfo.GPSDateStamp")); @@ -618,8 +623,9 @@ namespace Exiv2 { } if (subsec.size() > 10) subsec = subsec.substr(0, 10); - sprintf(buf, "%4d-%02d-%02dT%02d:%02d:%02d%s", - year, month, day, hour, min, sec, subsec.c_str()); + snprintf(buf, sizeof(buf), "%4d-%02d-%02dT%02d:%02d:%02d%s", + year, month, day, hour, min, sec, subsec.c_str()); + buf[sizeof(buf) - 1] = 0; (*xmpData_)[to] = buf; if (erase_) exifData_->erase(pos); @@ -792,13 +798,14 @@ namespace Exiv2 { SXMPUtils::ConvertToLocalTime(&datetime); - sprintf(buf, "%4d:%02d:%02d %02d:%02d:%02d", - static_cast(datetime.year), - static_cast(datetime.month), - static_cast(datetime.day), - static_cast(datetime.hour), - static_cast(datetime.minute), - static_cast(datetime.second)); + snprintf(buf, sizeof(buf), "%4d:%02d:%02d %02d:%02d:%02d", + static_cast(datetime.year), + static_cast(datetime.month), + static_cast(datetime.day), + static_cast(datetime.hour), + static_cast(datetime.minute), + static_cast(datetime.second)); + buf[sizeof(buf) - 1] = 0; (*exifData_)[to] = buf; if (datetime.nanoSecond) { @@ -841,10 +848,11 @@ namespace Exiv2 { (*exifData_)[to] = array.str(); prepareExifTarget("Exif.GPSInfo.GPSDateStamp", true); - sprintf(buf, "%4d:%02d:%02d", + snprintf(buf, sizeof(buf), "%4d:%02d:%02d", static_cast(datetime.year), static_cast(datetime.month), static_cast(datetime.day)); + buf[sizeof(buf) - 1] = 0; (*exifData_)["Exif.GPSInfo.GPSDateStamp"] = buf; } diff --git a/test/xmpparser-test.sh b/test/xmpparser-test.sh index 8eebe597..ab283c44 100755 --- a/test/xmpparser-test.sh +++ b/test/xmpparser-test.sh @@ -17,7 +17,7 @@ good="./data/xmpparser-test.out" # Main routine ( binpath="$VALGRIND ../../samples" -exiv2="$VALGRIND ../../src/exiv2" +exiv2="$VALGRIND exiv2" cd ./tmp # ----------------------------------------------------------------------