From: Uoti Urpala <[email protected]>

The output type of the AV_RL32/AV_RB32 macros was signed int. The
resulting overflow broke at least some ASF streams with large
timestamps. Fix by adding a cast to uint32_t.

Signed-off-by: Ronald S. Bultje <[email protected]>
---
 libavutil/intreadwrite.h |   16 ++++++++--------
 1 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/libavutil/intreadwrite.h b/libavutil/intreadwrite.h
index c8489f1..0bacdb8 100644
--- a/libavutil/intreadwrite.h
+++ b/libavutil/intreadwrite.h
@@ -230,10 +230,10 @@ union unaligned_16 { uint16_t l; } 
__attribute__((packed)) av_alias;
 
 #ifndef AV_RB32
 #   define AV_RB32(x)                           \
-    ((((const uint8_t*)(x))[0] << 24) |         \
-     (((const uint8_t*)(x))[1] << 16) |         \
-     (((const uint8_t*)(x))[2] <<  8) |         \
-      ((const uint8_t*)(x))[3])
+    ((uint32_t)(((const uint8_t*)(x))[0] << 24) |\
+               (((const uint8_t*)(x))[1] << 16) |\
+               (((const uint8_t*)(x))[2] <<  8) |\
+                ((const uint8_t*)(x))[3])
 #endif
 #ifndef AV_WB32
 #   define AV_WB32(p, d) do {                   \
@@ -246,10 +246,10 @@ union unaligned_16 { uint16_t l; } 
__attribute__((packed)) av_alias;
 
 #ifndef AV_RL32
 #   define AV_RL32(x)                           \
-    ((((const uint8_t*)(x))[3] << 24) |         \
-     (((const uint8_t*)(x))[2] << 16) |         \
-     (((const uint8_t*)(x))[1] <<  8) |         \
-      ((const uint8_t*)(x))[0])
+    ((uint32_t)(((const uint8_t*)(x))[3] << 24) |\
+               (((const uint8_t*)(x))[2] << 16) |\
+               (((const uint8_t*)(x))[1] <<  8) |\
+                ((const uint8_t*)(x))[0])
 #endif
 #ifndef AV_WL32
 #   define AV_WL32(p, d) do {                   \
-- 
1.7.4.4

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to