mirror of
https://github.com/ipxe/ipxe
synced 2026-01-21 18:30:56 +03:00
[deflate] Remove userptr_t from decompression code
Simplify the deflate, zlib, and gzip decompression code by assuming that all content is fully accessible via pointer dereferences. Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
@@ -156,19 +156,18 @@ static void deflate_okx ( struct deflate *deflate,
|
||||
struct deflate_test *test,
|
||||
struct deflate_test_fragments *frags,
|
||||
const char *file, unsigned int line ) {
|
||||
uint8_t data[ test->expected_len ];
|
||||
struct deflate_chunk in;
|
||||
struct deflate_chunk out;
|
||||
size_t frag_len = -1UL;
|
||||
size_t offset = 0;
|
||||
uint8_t buf[ test->expected_len ];
|
||||
const void *data = test->compressed;
|
||||
size_t remaining = test->compressed_len;
|
||||
size_t frag_len = -1UL;
|
||||
struct deflate_chunk out;
|
||||
unsigned int i;
|
||||
|
||||
/* Initialise decompressor */
|
||||
deflate_init ( deflate, test->format );
|
||||
|
||||
/* Initialise output chunk */
|
||||
deflate_chunk_init ( &out, virt_to_user ( data ), 0, sizeof ( data ) );
|
||||
deflate_chunk_init ( &out, buf, 0, sizeof ( buf ) );
|
||||
|
||||
/* Process input (in fragments, if applicable) */
|
||||
for ( i = 0 ; i < ( sizeof ( frags->len ) /
|
||||
@@ -179,16 +178,15 @@ static void deflate_okx ( struct deflate *deflate,
|
||||
frag_len = frags->len[i];
|
||||
if ( frag_len > remaining )
|
||||
frag_len = remaining;
|
||||
deflate_chunk_init ( &in, virt_to_user ( test->compressed ),
|
||||
offset, ( offset + frag_len ) );
|
||||
|
||||
/* Decompress this fragment */
|
||||
okx ( deflate_inflate ( deflate, &in, &out ) == 0, file, line );
|
||||
okx ( in.len == ( offset + frag_len ), file, line );
|
||||
okx ( in.offset == in.len, file, line );
|
||||
okx ( deflate_inflate ( deflate, data, frag_len,
|
||||
&out ) == 0, file, line );
|
||||
okx ( deflate->in == ( data + frag_len ), file, line );
|
||||
okx ( deflate->end == ( data + frag_len ), file, line );
|
||||
|
||||
/* Move to next fragment */
|
||||
offset = in.offset;
|
||||
data += frag_len;
|
||||
remaining -= frag_len;
|
||||
if ( ! remaining )
|
||||
break;
|
||||
@@ -199,9 +197,13 @@ static void deflate_okx ( struct deflate *deflate,
|
||||
|
||||
/* Check decompression has terminated as expected */
|
||||
okx ( deflate_finished ( deflate ), file, line );
|
||||
okx ( offset == test->compressed_len, file, line );
|
||||
okx ( deflate->in == ( test->compressed + test->compressed_len ),
|
||||
file, line );
|
||||
okx ( deflate->end == ( test->compressed + test->compressed_len ),
|
||||
file, line );
|
||||
okx ( out.offset == test->expected_len, file, line );
|
||||
okx ( memcmp ( data, test->expected, test->expected_len ) == 0,
|
||||
okx ( out.data == buf, file, line );
|
||||
okx ( memcmp ( out.data, test->expected, test->expected_len ) == 0,
|
||||
file, line );
|
||||
}
|
||||
#define deflate_ok( deflate, test, frags ) \
|
||||
|
||||
@@ -33,6 +33,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
|
||||
#undef NDEBUG
|
||||
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include <ipxe/image.h>
|
||||
#include <ipxe/gzip.h>
|
||||
#include <ipxe/test.h>
|
||||
@@ -114,8 +115,7 @@ static void gzip_okx ( struct gzip_test *test, const char *file,
|
||||
struct image *extracted;
|
||||
|
||||
/* Construct compressed image */
|
||||
image = image_memory ( test->compressed_name,
|
||||
virt_to_user ( test->compressed ),
|
||||
image = image_memory ( test->compressed_name, test->compressed,
|
||||
test->compressed_len );
|
||||
okx ( image != NULL, file, line );
|
||||
okx ( image->len == test->compressed_len, file, line );
|
||||
@@ -128,7 +128,7 @@ static void gzip_okx ( struct gzip_test *test, const char *file,
|
||||
|
||||
/* Verify extracted image content */
|
||||
okx ( extracted->len == test->expected_len, file, line );
|
||||
okx ( memcmp ( extracted->data, virt_to_user ( test->expected ),
|
||||
okx ( memcmp ( extracted->data, test->expected,
|
||||
test->expected_len ) == 0, file, line );
|
||||
|
||||
/* Verify extracted image name */
|
||||
|
||||
@@ -89,8 +89,7 @@ static void zlib_okx ( struct zlib_test *test, const char *file,
|
||||
struct image *extracted;
|
||||
|
||||
/* Construct compressed image */
|
||||
image = image_memory ( test->compressed_name,
|
||||
virt_to_user ( test->compressed ),
|
||||
image = image_memory ( test->compressed_name, test->compressed,
|
||||
test->compressed_len );
|
||||
okx ( image != NULL, file, line );
|
||||
okx ( image->len == test->compressed_len, file, line );
|
||||
@@ -103,7 +102,7 @@ static void zlib_okx ( struct zlib_test *test, const char *file,
|
||||
|
||||
/* Verify extracted image content */
|
||||
okx ( extracted->len == test->expected_len, file, line );
|
||||
okx ( memcmp ( extracted->data, virt_to_user ( test->expected ),
|
||||
okx ( memcmp ( extracted->data, test->expected,
|
||||
test->expected_len ) == 0, file, line );
|
||||
|
||||
/* Verify extracted image name */
|
||||
|
||||
Reference in New Issue
Block a user