mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-27 07:34:06 +02:00
RedfishPkg/JsonLib: fix JsonObjectGetValue issue
JsonObjectGetValue() cannot find corresponding JSON value when the EDKII_JSON_VALUE object is created by another UEFI driver. This is because "hashtable_seed" is initialized by current time while JsonLib is loaded. So, "hashtable_seed" will be different in each individual UEFI driver. Signed-off-by: Nickle Wang <nicklew@nvidia.com> Cc: Abner Chang <abner.chang@amd.com> Cc: Igor Kulchytskyy <igork@ami.com> Cc: Nick Ramirez <nramirez@nvidia.com> Reviewed-by: Igor Kulchytskyy <igork@ami.com> Reviewed-by: Abner Chang <abner.chang@amd.com>
This commit is contained in:
parent
ea628f28e5
commit
f67e1934d9
@ -19,6 +19,8 @@
|
|||||||
|
|
||||||
#include "jansson.h"
|
#include "jansson.h"
|
||||||
|
|
||||||
|
extern volatile UINT32 hashtable_seed;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
The function is used to initialize a JSON value which contains a new JSON array,
|
The function is used to initialize a JSON value which contains a new JSON array,
|
||||||
or NULL on error. Initially, the array is empty.
|
or NULL on error. Initially, the array is empty.
|
||||||
@ -1138,3 +1140,36 @@ JsonGetType (
|
|||||||
{
|
{
|
||||||
return (EDKII_JSON_TYPE)(((json_t *)JsonValue)->type);
|
return (EDKII_JSON_TYPE)(((json_t *)JsonValue)->type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
JSON Library constructor.
|
||||||
|
|
||||||
|
@param ImageHandle The image handle.
|
||||||
|
@param SystemTable The system table.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS Protocol listener is registered successfully.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
JsonLibConstructor (
|
||||||
|
IN EFI_HANDLE ImageHandle,
|
||||||
|
IN EFI_SYSTEM_TABLE *SystemTable
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// hashtable_seed is initalized by current time while JsonLib is loaded.
|
||||||
|
// Due to above mechanism, hashtable_seed will be different in each individual
|
||||||
|
// UEFI driver. As the result, the hash of same key in different UEFI driver
|
||||||
|
// would be different. This breaks JsonObjectGetValue() because
|
||||||
|
// JsonObjectGetValue() won't be able to find corresponding JSON value if
|
||||||
|
// this EDKII_JSON_VALUE is created by another UEFI driver.
|
||||||
|
//
|
||||||
|
// Initial the seed to a fixed magic value for JsonLib to be working in all
|
||||||
|
// UEFI drivers. This fixed number will be removed after the protocol version
|
||||||
|
// of JsonLib is implemented in the future.
|
||||||
|
//
|
||||||
|
hashtable_seed = 0xFDAE2143;
|
||||||
|
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
MODULE_TYPE = DXE_DRIVER
|
MODULE_TYPE = DXE_DRIVER
|
||||||
VERSION_STRING = 1.0
|
VERSION_STRING = 1.0
|
||||||
LIBRARY_CLASS = JsonLib|DXE_DRIVER UEFI_APPLICATION UEFI_DRIVER
|
LIBRARY_CLASS = JsonLib|DXE_DRIVER UEFI_APPLICATION UEFI_DRIVER
|
||||||
|
CONSTRUCTOR = JsonLibConstructor
|
||||||
|
|
||||||
#
|
#
|
||||||
# VALID_ARCHITECTURES = IA32 X64 ARM AARCH64 RISCV64
|
# VALID_ARCHITECTURES = IA32 X64 ARM AARCH64 RISCV64
|
||||||
|
Loading…
x
Reference in New Issue
Block a user