@@ -4411,6 +4411,17 @@ class Exifdatum_pointer {
44114411 return 0;
44124412 return ptr->size();
44134413 }
4414+ #if 0x001b0700 < 0x001c0000
4415+ // Provide count() C++ method for index bounds check
4416+ long count() {
4417+ if (invalidated)
4418+ return 0;
4419+ Exiv2::Exifdatum* ptr = **this;
4420+ if (!ptr)
4421+ return 0;
4422+ return ptr->count();
4423+ }
4424+ #endif
44144425 // Invalidate iterator unilaterally
44154426 void _invalidate() { invalidated = true; }
44164427 // Invalidate iterator if what it points to has been deleted
@@ -6537,6 +6548,12 @@ SWIGINTERN PyObject *_wrap_Exifdatum_pointer_toLong(PyObject *self, PyObject *ar
65376548 }
65386549 arg2 = static_cast< long >(val2);
65396550 }
6551+
6552+ if (arg2 < 0 || arg2 >= static_cast< long >(arg1->count())) {
6553+ PyErr_Format(PyExc_IndexError, "index %d out of range", arg2);
6554+ SWIG_fail;
6555+ }
6556+
65406557 {
65416558 try {
65426559 result = (long)(*arg1)->toLong(arg2);
@@ -6580,6 +6597,12 @@ SWIGINTERN PyObject *_wrap_Exifdatum_pointer_toFloat(PyObject *self, PyObject *a
65806597 }
65816598 arg2 = static_cast< long >(val2);
65826599 }
6600+
6601+ if (arg2 < 0 || arg2 >= static_cast< long >(arg1->count())) {
6602+ PyErr_Format(PyExc_IndexError, "index %d out of range", arg2);
6603+ SWIG_fail;
6604+ }
6605+
65836606 {
65846607 try {
65856608 result = (float)(*arg1)->toFloat(arg2);
@@ -6623,6 +6646,12 @@ SWIGINTERN PyObject *_wrap_Exifdatum_pointer_toRational(PyObject *self, PyObject
66236646 }
66246647 arg2 = static_cast< long >(val2);
66256648 }
6649+
6650+ if (arg2 < 0 || arg2 >= static_cast< long >(arg1->count())) {
6651+ PyErr_Format(PyExc_IndexError, "index %d out of range", arg2);
6652+ SWIG_fail;
6653+ }
6654+
66266655 {
66276656 try {
66286657 result = (*arg1)->toRational(arg2);
@@ -8138,6 +8167,12 @@ SWIGINTERN PyObject *_wrap_Exifdatum_toLong(PyObject *self, PyObject *args) {
81388167 }
81398168 arg2 = static_cast< long >(val2);
81408169 }
8170+
8171+ if (arg2 < 0 || arg2 >= static_cast< long >(arg1->count())) {
8172+ PyErr_Format(PyExc_IndexError, "index %d out of range", arg2);
8173+ SWIG_fail;
8174+ }
8175+
81418176 {
81428177 try {
81438178 result = (long)((Exiv2::Exifdatum const *)arg1)->toLong(arg2);
@@ -8181,6 +8216,12 @@ SWIGINTERN PyObject *_wrap_Exifdatum_toFloat(PyObject *self, PyObject *args) {
81818216 }
81828217 arg2 = static_cast< long >(val2);
81838218 }
8219+
8220+ if (arg2 < 0 || arg2 >= static_cast< long >(arg1->count())) {
8221+ PyErr_Format(PyExc_IndexError, "index %d out of range", arg2);
8222+ SWIG_fail;
8223+ }
8224+
81848225 {
81858226 try {
81868227 result = (float)((Exiv2::Exifdatum const *)arg1)->toFloat(arg2);
@@ -8224,6 +8265,12 @@ SWIGINTERN PyObject *_wrap_Exifdatum_toRational(PyObject *self, PyObject *args)
82248265 }
82258266 arg2 = static_cast< long >(val2);
82268267 }
8268+
8269+ if (arg2 < 0 || arg2 >= static_cast< long >(arg1->count())) {
8270+ PyErr_Format(PyExc_IndexError, "index %d out of range", arg2);
8271+ SWIG_fail;
8272+ }
8273+
82278274 {
82288275 try {
82298276 result = ((Exiv2::Exifdatum const *)arg1)->toRational(arg2);
0 commit comments