]> granicus.if.org Git - taglib/commitdiff
Fix unexpected sign extension
authorTsuda kageyu <tsuda.kageyu@gmail.com>
Sun, 21 Apr 2013 07:06:12 +0000 (16:06 +0900)
committerTsuda kageyu <tsuda.kageyu@gmail.com>
Sun, 21 Apr 2013 07:06:12 +0000 (16:06 +0900)
taglib/toolkit/tbytevector.cpp

index f1ca4c78769931256d927697f8f383951734ff35..fafaf68fcc1c49d9e266d99460c222055f15a8a8 100644 (file)
@@ -227,18 +227,13 @@ T toNumber(const ByteVector &v, size_t offset, size_t length, bool mostSignifica
     return 0;
   }
 
-  if(length >= sizeof(T)) {
-    return toNumber<T>(v, offset, mostSignificantByteFirst);
+  T sum = 0;
+  for(size_t i = 0; i < length; i++) {
+    const size_t shift = (mostSignificantByteFirst ? length - 1 - i : i) * 8;
+    sum |= static_cast<T>(static_cast<uchar>(v[offset + i])) << shift;
   }
-  else {
-    T sum = 0;
-    for(size_t i = 0; i < length; i++) {
-      const size_t shift = (mostSignificantByteFirst ? length - 1 - i : i) * 8;
-      sum |= static_cast<T>(static_cast<uchar>(v[offset + i]) << shift);
-    }
 
-    return sum;
-  }
+  return sum;
 }
 
 template <class T>