32 IN CONST VOID *Packed,
34 OUT UINTN *UnpackedSize
38 CONST UINT8 *PackedWalker;
39 UINT8 *UnpackedWalker;
42 if (BaseOverflowMulUN (PackedSize, 8, UnpackedSize)) {
51 *UnpackedSize = *UnpackedSize - (*UnpackedSize % 8);
52 if ((*UnpackedSize == 0) || BaseOverflowAddUN (*UnpackedSize, 1, UnpackedSize)) {
56 Unpacked = AllocatePool (*UnpackedSize);
57 if (Unpacked == NULL) {
62 PackedWalker = Packed;
63 UnpackedWalker = Unpacked;
65 while (PackedSize >= 7) {
66 CopyMem (&Sequence, PackedWalker, 7);
67 *UnpackedWalker++ = (UINT8)BitFieldRead64 (Sequence, 7 * 0, 7 * 0 + 6);
68 *UnpackedWalker++ = (UINT8)BitFieldRead64 (Sequence, 7 * 1, 7 * 1 + 6);
69 *UnpackedWalker++ = (UINT8)BitFieldRead64 (Sequence, 7 * 2, 7 * 2 + 6);
70 *UnpackedWalker++ = (UINT8)BitFieldRead64 (Sequence, 7 * 3, 7 * 3 + 6);
71 *UnpackedWalker++ = (UINT8)BitFieldRead64 (Sequence, 7 * 4, 7 * 4 + 6);
72 *UnpackedWalker++ = (UINT8)BitFieldRead64 (Sequence, 7 * 5, 7 * 5 + 6);
73 *UnpackedWalker++ = (UINT8)BitFieldRead64 (Sequence, 7 * 6, 7 * 6 + 6);
74 *UnpackedWalker++ = (UINT8)BitFieldRead64 (Sequence, 7 * 7, 7 * 7 + 6);
82 *UnpackedWalker++ =
'\0';
91 IN OUT UINTN *AllocatedSize,
92 IN OUT UINTN *CurrentSize,
93 IN CONST CHAR8 *NewData,
100 if (*AllocatedSize - *CurrentSize <= NewDataSize) {
101 if (*AllocatedSize > 0) {
102 NewSize = *AllocatedSize;
104 NewSize = NewDataSize;
107 NewSize =
MAX (NewSize, 8192);
109 if (BaseOverflowMulUN (NewSize, 2, &NewSize)) {
117 TmpBuffer = ReallocatePool (*AllocatedSize, NewSize, *
Buffer);
118 if (TmpBuffer == NULL) {
127 *AllocatedSize = NewSize;
131 *CurrentSize += NewDataSize;
138 IN CONST CHAR8 *Encoded,
139 IN UINTN EncodedSize,
140 OUT UINTN *ExpandedSize
150 EncodedStart = AsciiStrStr (Encoded,
"loaded kext");
151 if (EncodedStart == NULL) {
159 TmpSize = EncodedStart - EncodedStart;
161 if (!
PanicExpandPutBuf (&Expanded, &AllocatedSize, &CurrentSize, Encoded, TmpSize)) {
166 EncodedSize -= TmpSize;
168 while (EncodedSize > 0) {
171 switch (Encoded[0]) {
179 Success =
PanicExpandPutBuf (&Expanded, &AllocatedSize, &CurrentSize,
"com.apple.security.",
L_STR_LEN (
"com.apple.security."));
185 if (EncodedSize >= 2) {
187 switch (Encoded[1]) {
210 Success =
PanicExpandPutBuf (&Expanded, &AllocatedSize, &CurrentSize, Encoded, 2);
219 Success =
PanicExpandPutBuf (&Expanded, &AllocatedSize, &CurrentSize, Encoded, 1);
228 EncodedSize -= TmpSize;
231 *ExpandedSize = CurrentSize;
236 Expanded[CurrentSize] =
'\0';
243 OUT UINT32 *PanicSize
250 CHAR16 VariableName[32];
258 for (Index = 0; Index < 1024; ++Index) {
261 sizeof (VariableName),
266 if (EFI_ERROR (Status)) {
270 if (ValueSize == 0) {
275 PanicData = ReallocatePool (TmpDataSize, TmpDataSize + ValueSize, TmpData);
276 if (PanicData == NULL) {
278 if (TmpData != NULL) {
288 (UINT8 *)TmpData + TmpDataSize,
294 TmpDataSize += ValueSize;
310 PanicData =
PanicUnpack (TmpData, TmpDataSize, &TmpDataSize);
313 if (PanicData != NULL) {
317 TmpDataSize = AsciiStrLen (PanicData);
318 TmpData =
PanicExpand (PanicData, TmpDataSize, &TmpDataSize);
319 if (TmpData != NULL) {
320 FreePool (PanicData);
325 *PanicSize = (UINT32)TmpDataSize;
STATIC BOOLEAN PanicExpandPutBuf(IN OUT CHAR8 **Buffer, IN OUT UINTN *AllocatedSize, IN OUT UINTN *CurrentSize, IN CONST CHAR8 *NewData, IN UINTN NewDataSize)