diff --git a/libesedb-sys/patches/fix-ws2025-itag-state.patch b/libesedb-sys/patches/fix-ws2025-itag-state.patch new file mode 100644 index 0000000..6c7e0e8 --- /dev/null +++ b/libesedb-sys/patches/fix-ws2025-itag-state.patch @@ -0,0 +1,14 @@ +--- libesedb/libesedb_page_header.c ++++ libesedb/libesedb_page_header.c +@@ -241,1 +241,10 @@ +- page_header->available_page_tag ); ++ page_header->available_page_tag ); ++ ++ /* In the 32KiB page format the upper 4 bits of the available page tag ++ * are reserved (ctagReserved) and the lower 12 bits contain the actual ++ * number of page tags ++ */ ++ if( io_handle->page_size >= 32768 ) ++ { ++ page_header->available_page_tag &= 0x0fff; ++ } diff --git a/libesedb-sys/patches/zzz-fix-ws2025-btree.patch b/libesedb-sys/patches/zzz-fix-ws2025-btree.patch new file mode 100644 index 0000000..d90bd8f --- /dev/null +++ b/libesedb-sys/patches/zzz-fix-ws2025-btree.patch @@ -0,0 +1,98 @@ +--- libesedb/libesedb_page_tree.c ++++ libesedb/libesedb_page_tree.c +@@ -1456,22 +1456,40 @@ +- last_leaf_page_number = safe_leaf_page_number; +- +- if( libfdata_vector_get_element_value_by_index( +- page_tree->pages_vector, +- (intptr_t *) file_io_handle, +- (libfdata_cache_t *) page_tree->pages_cache, +- (int) safe_leaf_page_number - 1, +- (intptr_t **) &page, +- 0, +- error ) != 1 ) +- { +- libcerror_error_set( +- error, +- LIBCERROR_ERROR_DOMAIN_RUNTIME, +- LIBCERROR_RUNTIME_ERROR_GET_FAILED, +- "%s: unable to retrieve page: %" PRIu32 ".", +- function, +- safe_leaf_page_number ); +- +- return( -1 ); +- } +- if( libesedb_page_get_previous_page_number( ++ if( libfdata_vector_get_element_value_by_index( ++ page_tree->pages_vector, ++ (intptr_t *) file_io_handle, ++ (libfdata_cache_t *) page_tree->pages_cache, ++ (int) safe_leaf_page_number - 1, ++ (intptr_t **) &page, ++ 0, ++ error ) != 1 ) ++ { ++ libcerror_error_set( ++ error, ++ LIBCERROR_ERROR_DOMAIN_RUNTIME, ++ LIBCERROR_RUNTIME_ERROR_GET_FAILED, ++ "%s: unable to retrieve page: %" PRIu32 ".", ++ function, ++ safe_leaf_page_number ); ++ ++ return( -1 ); ++ } ++ /* Stop backward walk if the page is not a leaf page ++ */ ++ if( libesedb_page_get_flags( ++ page, ++ &page_flags, ++ error ) != 1 ) ++ { ++ libcerror_error_set( ++ error, ++ LIBCERROR_ERROR_DOMAIN_RUNTIME, ++ LIBCERROR_RUNTIME_ERROR_GET_FAILED, ++ "%s: unable to retrieve page flags from page: %" PRIu32 ".", ++ function, ++ safe_leaf_page_number ); ++ ++ return( -1 ); ++ } ++ if( ( page_flags & LIBESEDB_PAGE_FLAG_IS_LEAF ) == 0 ) ++ { ++ break; ++ } ++ last_leaf_page_number = safe_leaf_page_number; ++ ++ if( libesedb_page_get_previous_page_number( +@@ -1673,1 +1691,2 @@ +- uint32_t leaf_page_number = 0; ++ uint32_t leaf_page_number = 0; ++ uint32_t page_flags = 0; +@@ -1765,2 +1784,19 @@ +- } +- if( libesedb_page_tree_get_number_of_leaf_values_from_leaf_page( ++ } ++ /* Stop forward walk if the page is not a leaf page ++ */ ++ if( libesedb_page_get_flags( ++ page, ++ &page_flags, ++ error ) != 1 ) ++ { ++ libcerror_error_set( ++ error, ++ LIBCERROR_ERROR_DOMAIN_RUNTIME, ++ LIBCERROR_RUNTIME_ERROR_GET_FAILED, ++ "%s: unable to retrieve page flags from page: %" PRIu32 ".", ++ function, ++ leaf_page_number ); ++ ++ goto on_error; ++ } ++ if( ( page_flags & LIBESEDB_PAGE_FLAG_IS_LEAF ) == 0 ) ++ { ++ break; ++ } ++ if( libesedb_page_tree_get_number_of_leaf_values_from_leaf_page(