104 lines
4.0 KiB
Diff
104 lines
4.0 KiB
Diff
|
From f496795a850976d211d3f5c673b868c3c90a8c3d Mon Sep 17 00:00:00 2001
|
||
|
From: "Brian C. Lane" <bcl@redhat.com>
|
||
|
Date: Fri, 13 Nov 2020 15:25:35 -0800
|
||
|
Subject: [PATCH 38/42] hfs/reloc_plus: Fix gcc 10 warnings about cast
|
||
|
alignment
|
||
|
|
||
|
---
|
||
|
libparted/fs/r/hfs/reloc_plus.c | 33 +++++++++++++++++++--------------
|
||
|
1 file changed, 19 insertions(+), 14 deletions(-)
|
||
|
|
||
|
diff --git a/libparted/fs/r/hfs/reloc_plus.c b/libparted/fs/r/hfs/reloc_plus.c
|
||
|
index cebadbe..44c0a77 100644
|
||
|
--- a/libparted/fs/r/hfs/reloc_plus.c
|
||
|
+++ b/libparted/fs/r/hfs/reloc_plus.c
|
||
|
@@ -486,6 +486,7 @@ hfsplus_cache_from_catalog(HfsCPrivateCache* cache, PedFileSystem* fs,
|
||
|
unsigned int i, j, size, bsize;
|
||
|
uint32_t jib = priv_data->jib_start_block,
|
||
|
jl = priv_data->jl_start_block;
|
||
|
+ uint16_t catalog_pos;
|
||
|
|
||
|
if (!priv_data->catalog_file->sect_nb) {
|
||
|
ped_exception_throw (
|
||
|
@@ -520,15 +521,16 @@ hfsplus_cache_from_catalog(HfsCPrivateCache* cache, PedFileSystem* fs,
|
||
|
unsigned int skip;
|
||
|
uint8_t where;
|
||
|
|
||
|
- catalog_key = (HfsPCatalogKey*)
|
||
|
- ( node + PED_BE16_TO_CPU (*((uint16_t *)
|
||
|
- (node+(bsize - 2*i)))) );
|
||
|
+ uint16_t value;
|
||
|
+ memcpy(&value, node+(bsize - (2*i)), sizeof(uint16_t));
|
||
|
+ catalog_pos = PED_BE16_TO_CPU(value);
|
||
|
+ catalog_key = (HfsPCatalogKey*)(node + catalog_pos);
|
||
|
skip = ( 2 + PED_BE16_TO_CPU (catalog_key->key_length)
|
||
|
+ 1) & ~1;
|
||
|
catalog_data = (HfsPCatalog*)
|
||
|
(((uint8_t*)catalog_key) + skip);
|
||
|
/* check for obvious error in FS */
|
||
|
- if (((uint8_t*)catalog_key - node < HFS_FIRST_REC)
|
||
|
+ if ((catalog_pos < HFS_FIRST_REC)
|
||
|
|| ((uint8_t*)catalog_data - node
|
||
|
>= (signed) bsize
|
||
|
- 2 * (signed)(record_number+1))) {
|
||
|
@@ -609,6 +611,7 @@ hfsplus_cache_from_extent(HfsCPrivateCache* cache, PedFileSystem* fs,
|
||
|
HfsPExtDescriptor* extent;
|
||
|
unsigned int leaf_node, record_number;
|
||
|
unsigned int i, j, size, bsize;
|
||
|
+ uint16_t extent_pos;
|
||
|
|
||
|
if (!priv_data->extents_file->sect_nb) {
|
||
|
ped_exception_throw (
|
||
|
@@ -640,13 +643,14 @@ hfsplus_cache_from_extent(HfsCPrivateCache* cache, PedFileSystem* fs,
|
||
|
record_number = PED_BE16_TO_CPU (desc->rec_nb);
|
||
|
for (i = 1; i <= record_number; i++) {
|
||
|
uint8_t where;
|
||
|
- extent_key = (HfsPExtentKey*)
|
||
|
- (node + PED_BE16_TO_CPU(*((uint16_t *)
|
||
|
- (node+(bsize - 2*i)))));
|
||
|
+ uint16_t value;
|
||
|
+ memcpy(&value, node+(bsize - (2*i)), sizeof(uint16_t));
|
||
|
+ extent_pos = PED_BE16_TO_CPU(value);
|
||
|
+ extent_key = (HfsPExtentKey*)(node + extent_pos);
|
||
|
extent = (HfsPExtDescriptor*)
|
||
|
(((uint8_t*)extent_key) + sizeof (HfsPExtentKey));
|
||
|
/* check for obvious error in FS */
|
||
|
- if (((uint8_t*)extent_key - node < HFS_FIRST_REC)
|
||
|
+ if ((extent_pos < HFS_FIRST_REC)
|
||
|
|| ((uint8_t*)extent - node
|
||
|
>= (signed)bsize
|
||
|
- 2 * (signed)(record_number+1))) {
|
||
|
@@ -724,6 +728,7 @@ hfsplus_cache_from_attributes(HfsCPrivateCache* cache, PedFileSystem* fs,
|
||
|
HfsPExtDescriptor* extent;
|
||
|
unsigned int leaf_node, record_number;
|
||
|
unsigned int i, j, size, bsize;
|
||
|
+ uint16_t generic_pos;
|
||
|
|
||
|
/* attributes file is facultative */
|
||
|
if (!priv_data->attributes_file->sect_nb)
|
||
|
@@ -751,15 +756,15 @@ hfsplus_cache_from_attributes(HfsCPrivateCache* cache, PedFileSystem* fs,
|
||
|
record_number = PED_BE16_TO_CPU (desc->rec_nb);
|
||
|
for (i = 1; i <= record_number; i++) {
|
||
|
unsigned int skip;
|
||
|
- generic_key = (HfsPPrivateGenericKey*)
|
||
|
- (node + PED_BE16_TO_CPU(*((uint16_t *)
|
||
|
- (node+(bsize - 2*i)))));
|
||
|
+ uint16_t value;
|
||
|
+ memcpy(&value, node+(bsize - (2*i)), sizeof(uint16_t));
|
||
|
+ generic_pos = PED_BE16_TO_CPU(value);
|
||
|
+ generic_key = (HfsPPrivateGenericKey*)(node + generic_pos);
|
||
|
skip = ( 2 + PED_BE16_TO_CPU (generic_key->key_length)
|
||
|
+ 1 ) & ~1;
|
||
|
- fork_ext_data = (HfsPForkDataAttr*)
|
||
|
- (((uint8_t*)generic_key) + skip);
|
||
|
+ fork_ext_data = (HfsPForkDataAttr*)(node+generic_pos+skip);
|
||
|
/* check for obvious error in FS */
|
||
|
- if (((uint8_t*)generic_key - node < HFS_FIRST_REC)
|
||
|
+ if ((generic_pos < HFS_FIRST_REC)
|
||
|
|| ((uint8_t*)fork_ext_data - node
|
||
|
>= (signed) bsize
|
||
|
- 2 * (signed)(record_number+1))) {
|
||
|
--
|
||
|
2.26.2
|
||
|
|