*/
 #define strtomem_pad(dest, src, pad)   do {                            \
        const size_t _dest_len = __builtin_object_size(dest, 1);        \
+       const size_t _src_len = __builtin_object_size(src, 1);          \
                                                                        \
        BUILD_BUG_ON(!__builtin_constant_p(_dest_len) ||                \
                     _dest_len == (size_t)-1);                          \
-       memcpy_and_pad(dest, _dest_len, src, strnlen(src, _dest_len), pad); \
+       memcpy_and_pad(dest, _dest_len, src,                            \
+                      strnlen(src, min(_src_len, _dest_len)), pad);    \
 } while (0)
 
 /**
  */
 #define strtomem(dest, src)    do {                                    \
        const size_t _dest_len = __builtin_object_size(dest, 1);        \
+       const size_t _src_len = __builtin_object_size(src, 1);          \
                                                                        \
        BUILD_BUG_ON(!__builtin_constant_p(_dest_len) ||                \
                     _dest_len == (size_t)-1);                          \
-       memcpy(dest, src, min(_dest_len, strnlen(src, _dest_len)));     \
+       memcpy(dest, src, strnlen(src, min(_src_len, _dest_len)));      \
 } while (0)
 
 /**