This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
hv_func.h: Fix compilation error
[perl5.git] / hv_func.h
index e091c86..da37442 100644 (file)
--- a/hv_func.h
+++ b/hv_func.h
     sbox32_seed_state96(seed + __PERL_HASH_SEED_BYTES , state + __PERL_HASH_STATE_BYTES);   \
 } STMT_END
 
-#define _PERL_HASH_WITH_STATE(state,str,len)                                                \
-    ((len <= SBOX32_MAX_LEN)                                                                \
-        ? sbox32_hash_with_state((state + __PERL_HASH_STATE_BYTES),(U8*)(str),(len))        \
-        : __PERL_HASH_WITH_STATE((state),(str),(len)))
+#define _PERL_HASH_WITH_STATE(state,str,len)                                            \
+    (LIKELY(len <= SBOX32_MAX_LEN)                                                      \
+        ? sbox32_hash_with_state((state + __PERL_HASH_STATE_BYTES),(U8*)(str),(len))    \
+        : UNLIKELY(len > (STRLEN) I32_MAX)                                              \
+          ? Perl_croak_nocontext("Sorry, hash keys must be smaller than 2**31 bytes")   \
+          : __PERL_HASH_WITH_STATE((state),(str),(len)))
 
 #endif
 
@@ -109,7 +111,7 @@ U32 S_perl_hash_with_seed(const U8 * const seed, const U8 * const str, const STR
 }
 
 #define PERL_HASH_WITH_SEED(seed,hash,str,len) \
-    (hash) = S_perl_hash_with_seed(seed,str,len)
+    (hash) = S_perl_hash_with_seed((const U8 *) seed, (const U8 *) str,len)
 #define PERL_HASH_WITH_STATE(state,hash,str,len) \
     (hash) = _PERL_HASH_WITH_STATE((state),(U8*)(str),(len))
 #define PERL_HASH_SEED_STATE(seed,state) _PERL_HASH_SEED_STATE(seed,state)