aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/exiv2wrapper.cpp22
-rw-r--r--test/exif.py5
-rw-r--r--test/iptc.py5
3 files changed, 29 insertions, 3 deletions
diff --git a/src/exiv2wrapper.cpp b/src/exiv2wrapper.cpp
index 121062e..d217144 100644
--- a/src/exiv2wrapper.cpp
+++ b/src/exiv2wrapper.cpp
@@ -33,6 +33,7 @@
#define METADATA_NOT_READ 101
#define NON_REPEATABLE 102
#define KEY_NOT_FOUND 103
+#define INVALID_VALUE 104
// Custom macros
#define CHECK_METADATA_READ \
@@ -477,7 +478,11 @@ ExifTag::~ExifTag()
void ExifTag::setRawValue(const std::string& value)
{
- _datum->setValue(value);
+ int result = _datum->setValue(value);
+ if (result != 0)
+ {
+ throw Exiv2::Error(INVALID_VALUE);
+ }
}
void ExifTag::setParentImage(Image& image)
@@ -616,7 +621,11 @@ void IptcTag::setRawValues(const boost::python::list& values)
if (iterator != _data->end())
{
// Override an existing value
- iterator->setValue(value);
+ int result = iterator->setValue(value);
+ if (result != 0)
+ {
+ throw Exiv2::Error(INVALID_VALUE);
+ }
// Jump to the next datum matching the key
++iterator;
while ((iterator != _data->end()) && (iterator->key() != _key.key()))
@@ -628,7 +637,11 @@ void IptcTag::setRawValues(const boost::python::list& values)
{
// Append a new value
Exiv2::Iptcdatum datum(_key);
- datum.setValue(value);
+ int result = datum.setValue(value);
+ if (result != 0)
+ {
+ throw Exiv2::Error(INVALID_VALUE);
+ }
int state = _data->add(datum);
if (state == 6)
{
@@ -1198,6 +1211,9 @@ void translateExiv2Error(Exiv2::Error const& error)
case KEY_NOT_FOUND:
PyErr_SetString(PyExc_KeyError, "Tag not set");
break;
+ case INVALID_VALUE:
+ PyErr_SetString(PyExc_ValueError, "Invalid value");
+ break;
// Default handler
default:
diff --git a/test/exif.py b/test/exif.py
index bb218c2..4ddb360 100644
--- a/test/exif.py
+++ b/test/exif.py
@@ -313,3 +313,8 @@ class TestExifTag(unittest.TestCase):
tag.value = 2
self.failIfEqual(tag.value, old_value)
+ def test_set_raw_value_invalid(self):
+ tag = ExifTag('Exif.GPSInfo.GPSVersionID')
+ value = '2 0 0 foo'
+ self.failUnlessRaises(ValueError, tag._set_raw_value, value)
+
diff --git a/test/iptc.py b/test/iptc.py
index 3b151a5..1940efd 100644
--- a/test/iptc.py
+++ b/test/iptc.py
@@ -190,3 +190,8 @@ class TestIptcTag(unittest.TestCase):
tag.values = ['Barcelona']
self.failIfEqual(tag.values, old_values)
+ def test_set_raw_values_invalid(self):
+ tag = IptcTag('Iptc.Envelope.DateSent')
+ values = ['foo']
+ self.failUnlessRaises(ValueError, tag._set_raw_values, values)
+