@@ -1874,6 +1874,80 @@ EXPORT size_t h_malloc_object_size_fast(const void *p) {
18741874 return SIZE_MAX ;
18751875}
18761876
1877+ #if CONFIG_BLOCK_OPS_CHECK_SIZE
1878+ void * h_memcpy_real (void * dst , const void * src , size_t len ) {
1879+ char * p_dst = (char * ) dst ;
1880+ char const * p_src = (char const * ) src ;
1881+
1882+ while (len -- ) {
1883+ * p_dst ++ = * p_src ++ ;
1884+ }
1885+
1886+ return dst ;
1887+ }
1888+
1889+ EXPORT void * h_memcpy (void * dst , const void * src , size_t len ) {
1890+ if (len > malloc_object_size (src )) {
1891+ fatal_error ("memcpy read overflow" );
1892+ }
1893+ if (len > malloc_object_size (dst )) {
1894+ fatal_error ("memcpy buffer overflow" );
1895+ }
1896+
1897+ return h_memcpy_real (dst , src , len );
1898+ }
1899+
1900+ void * h_memmove_real (void * dst , const void * src , size_t len ) {
1901+ char * p_dst = (char * ) dst ;
1902+ char const * p_src = (char const * ) src ;
1903+
1904+ if (dst == src ) {
1905+ return dst ;
1906+ }
1907+
1908+ if (p_src < p_dst ) {
1909+ p_dst += len ;
1910+ p_src += len ;
1911+ while (len -- ) {
1912+ * -- p_dst = * -- p_src ;
1913+ }
1914+ } else {
1915+ dst = h_memcpy (dst , src , len );
1916+ }
1917+
1918+ return dst ;
1919+ }
1920+
1921+ EXPORT void * h_memmove (void * dst , const void * src , size_t len ) {
1922+ if (len > malloc_object_size (src )) {
1923+ fatal_error ("memmove read overflow" );
1924+ }
1925+ if (len > malloc_object_size (dst )) {
1926+ fatal_error ("memmove buffer overflow" );
1927+ }
1928+
1929+ return h_memmove_real (dst , src , len );
1930+ }
1931+
1932+ void * h_memset_real (void * dst , int value , size_t len ) {
1933+ char * p_dst = (char * ) dst ;
1934+
1935+ while (len -- ) {
1936+ * p_dst ++ = value ;
1937+ }
1938+
1939+ return dst ;
1940+ }
1941+
1942+ EXPORT void * h_memset (void * dst , int value , size_t len ) {
1943+ if (len > malloc_object_size (dst )) {
1944+ fatal_error ("memset buffer overflow" );
1945+ }
1946+
1947+ return h_memset_real (dst , value , len );
1948+ }
1949+ #endif
1950+
18771951EXPORT int h_mallopt (UNUSED int param , UNUSED int value ) {
18781952#ifdef __ANDROID__
18791953 if (param == M_PURGE ) {
0 commit comments