)]}'
{
  "log": [
    {
      "commit": "ca4ba3996768dc0c8035a620d7e4d424db192f15",
      "tree": "2b9292b0af3a7729266fe3e3dcaa43574f59aa9d",
      "parents": [
        "767ab72c1f6fc11d7d075e6f06548af0ea9f6008"
      ],
      "author": {
        "name": "Aryk Ledet",
        "email": "arykledet@google.com",
        "time": "Wed Apr 22 21:28:06 2026 +0000"
      },
      "committer": {
        "name": "Aryk Ledet",
        "email": "arykledet@google.com",
        "time": "Thu Apr 23 16:02:41 2026 +0000"
      },
      "message": "[cper-lib] Implement CperDecoder and refactor safe accessors\n\nIntroduces a `CperDecoder` library to safely parse UEFI CPER records and\nrefactors the codebase to centralize safe memory access patterns. This ensures\nfull compatibility with UBSan and strict alignment toolchains.\n\nKey Changes:\n- CperDecoder: Added a new `uefi::cper::CperDecoder` class that provides a\nrobust interface for parsing CPER records. It performs signature validation,\nboundary checks for section descriptors, and provides safe access to section\nbodies via std::span.\n- Centralized getField: Moved the `getField\u003cT\u003e` helper to `include/cper.hpp`.\nThis allows the decoder and unit tests to share a single implementation for\nsafely reading members of unaligned packed structs using memcpy.\n- Hardened gmtime_r: Added explicit return value checks for `gmtime_r` calls,\nthrowing `std::runtime_error` on failure to ensure reliability when processing\ntimestamps.\n- Refactored Tests: Updated `cper_encoder_test.cpp` to use the new\n`CperDecoder` for its assertions. This simplifies the test logic and verifies\nthe decoder\u0027s functionality through round-trip testing.\n- New Test Coverage: Added unit tests for the decoder to verify handling of\ntruncated headers, invalid signatures, and malformed section counts.\n\nTested:\n- All 9 unit tests passed via Meson inside the gbmc_dev container.\n- All tests passed via Bazel/Blaze using the Google cc_toolchain.\n- Built an experimental cli tool on google3 using the decoder on AsicCper logs\nfrom sdhb and compared the output to the CFA\n\nGoogle-Bug-Id: 505395424\nChange-Id: I02a385a591f7ccee8fc9e3e28ee4e79755170656\nSigned-off-by: Aryk Ledet \u003carykledet@google.com\u003e\n"
    },
    {
      "commit": "767ab72c1f6fc11d7d075e6f06548af0ea9f6008",
      "tree": "23efe2fa43cdcd702f3e520b0fa0de466fcf6f91",
      "parents": [
        "82a14788d6e9a38e90a0f81d09925d729684fd42"
      ],
      "author": {
        "name": "Aryk Ledet",
        "email": "arykledet@google.com",
        "time": "Wed Apr 22 21:02:18 2026 +0000"
      },
      "committer": {
        "name": "Aryk Ledet",
        "email": "arykledet@google.com",
        "time": "Wed Apr 22 22:50:20 2026 +0000"
      },
      "message": "[cper-lib] Fix unaligned access and C++20 compatibility issues\n\nThis patch addresses several compatibility and safety issues discovered\nwhen integrating the library with stricter toolchains and sanitizers\n(specifically the Google cc_toolchain with UBSan enabled).\n\n- Fix SIGILL/Unaligned Access: UEFI CPER structures are inherently\n  unaligned. Accessing packed struct members directly can trigger\n  illegal instruction traps on strict platforms. Tests now use a\n  memcpy-based `getField\u003cT\u003e` helper to safely access unaligned fields.\n- C++20 \u0026 Toolchain Compatibility:\n    - Added missing \u003cvector\u003e and \u003cspan\u003e headers to cper_encoder.hpp.\n    - Added a virtual destructor to CperEncoder to satisfy\n      -Wnon-virtual-dtor.\n    - Fixed Class Template Argument Deduction (CTAD) warnings for\n      SeqMemcopy.\n- Thread Safety: Switched from `gmtime` to `gmtime_r` for timestamp\n  creation to ensure thread safety and avoid static buffer issues.\n- Compliance: Maintained all __attribute__((packed)) definitions\n  and static_assert offset checks to ensure the library remains\n  binary-compatible with the UEFI CPER specification.\n\nTested:\n- Verified all tests pass via Meson inside the gbmc_dev container.\n- Verified all tests pass via Bazel/Blaze using the Google cc_toolchain.\n\nGoogle-Bug-Id: 505395424\nChange-Id: I61863b8fad1b2b7fafdba662fcbeba10c71d809b\nSigned-off-by: Aryk Ledet \u003carykledet@google.com\u003e\n"
    },
    {
      "commit": "82a14788d6e9a38e90a0f81d09925d729684fd42",
      "tree": "efb5fd42b902f1c5e1a6d5b6fc9f8e06053296f0",
      "parents": [
        "2168ee146144e101f20273011c42b9f9bc4bb8de"
      ],
      "author": {
        "name": "Gaurav Gandhi",
        "email": "gauravgandhi@google.com",
        "time": "Sat Sep 27 03:17:58 2025 +0000"
      },
      "committer": {
        "name": "Gaurav Gandhi",
        "email": "gauravgandhi@google.com",
        "time": "Sat Sep 27 03:19:59 2025 +0000"
      },
      "message": "Fix: Resolve multiple definition linker error\n\nAdded the `inline` keyword to `uefi::cper::convertToBcd` and\n`uefi::cper::createCperTimestamp` functions in `cper_encoder.hpp`.\nThis resolves a linker error caused by multiple definitions of these\nfunctions when `cper_encoder.hpp` was included in multiple source files.\n\nTested: Fixes build failures in https://gbmc-internal-review.git.corp.google.com/c/deepsea-power-cap/+/244408\nGoogle-Bug-Id: 424199978\nChange-Id: I8fd86b8204b4406e6492b61e96c5f8b293d13888\nSigned-off-by: Gaurav Gandhi \u003cgauravgandhi@google.com\u003e\n"
    },
    {
      "commit": "2168ee146144e101f20273011c42b9f9bc4bb8de",
      "tree": "93aab40afc25e67d37b81c948efd55a33d4eed50",
      "parents": [
        "e0e1fc0711cbdb4a6da1b65d8e0a5c217cdd89d7"
      ],
      "author": {
        "name": "Aryk Ledet",
        "email": "arykledet@google.com",
        "time": "Wed Nov 06 22:49:57 2024 +0000"
      },
      "committer": {
        "name": "Aryk Ledet",
        "email": "arykledet@google.com",
        "time": "Thu Nov 07 23:49:32 2024 +0000"
      },
      "message": "Use BCD format timestamps\n\nTested: Unit tests, ran on GLP machine and checked decoded base64\nencoded cper log https://paste.googleplex.com/5503804505325568#l\u003d18\nGoogle-Bug-Id: b/377739641\nChange-Id: Idfeba55cf6f21ca8066fcbc555d6e30323f63289\nSigned-off-by: Aryk Ledet \u003carykledet@google.com\u003e\n"
    },
    {
      "commit": "e0e1fc0711cbdb4a6da1b65d8e0a5c217cdd89d7",
      "tree": "cf5becce5ee352bf2fee34761c9f2dcdc28cc4b7",
      "parents": [
        "488513cc8d895e1ca3f1b5f232c92a13c948b0d3"
      ],
      "author": {
        "name": "Aryk Ledet",
        "email": "arykledet@google.com",
        "time": "Wed Jul 24 20:27:34 2024 +0000"
      },
      "committer": {
        "name": "Aryk Ledet",
        "email": "arykledet@google.com",
        "time": "Wed Jul 24 22:36:34 2024 +0000"
      },
      "message": "Fix section offset to match uefi spec.\n\nThe section body offset should be the offset in bytes from the base of the record header. https://uefi.org/specs/UEFI/2.10/Apx_N_Common_Platform_Error_Record.html#section-descriptor\n\nTested: Unit tests\nGoogle-Bug-Id: 355269306\nChange-Id: Ic64a4a4b292ad6874cdfa71ae625a216842fdcf1\nSigned-off-by: Aryk Ledet \u003carykledet@google.com\u003e\n"
    },
    {
      "commit": "488513cc8d895e1ca3f1b5f232c92a13c948b0d3",
      "tree": "372e72761cf3615b061374467ab46ebb8f015bc1",
      "parents": [
        "cc9022623c5b5cf087f2cabb20545f42b28c3c42"
      ],
      "author": {
        "name": "Aryk Ledet",
        "email": "arykledet@google.com",
        "time": "Thu May 30 21:42:55 2024 +0000"
      },
      "committer": {
        "name": "Aryk Ledet",
        "email": "arykledet@google.com",
        "time": "Thu May 30 21:42:55 2024 +0000"
      },
      "message": "Use enabled flag for tests.\n\nThe allowed flag was allowing tests to be run incorrectly.\n\nChange-Id: I7fa8957a567cfe9b1f1b43347ca38324850a62ce\nSigned-off-by: Aryk Ledet \u003carykledet@google.com\u003e\n"
    },
    {
      "commit": "cc9022623c5b5cf087f2cabb20545f42b28c3c42",
      "tree": "c03da11da02c7ce5414fe5049ddcdafc3176dbe8",
      "parents": [
        "9021a06da0b0820250842d6a9a6c8beddcb4b246"
      ],
      "author": {
        "name": "Aryk Ledet",
        "email": "arykledet@google.com",
        "time": "Fri May 24 20:56:22 2024 +0000"
      },
      "committer": {
        "name": "Aryk Ledet",
        "email": "arykledet@google.com",
        "time": "Fri May 24 20:56:22 2024 +0000"
      },
      "message": "Use default SectionDescriptor constructor.\n\nMakes it easier to write tests.\n\nTested: Unit tests\nGoogle-Bug-Id: 322561358\nChange-Id: I2bd16915cb61b29c24519d313400ce8f82a90b95\nSigned-off-by: Aryk Ledet \u003carykledet@google.com\u003e\n"
    },
    {
      "commit": "9021a06da0b0820250842d6a9a6c8beddcb4b246",
      "tree": "1a649a6b282a33d2c5cfcf255b454b6673d868ae",
      "parents": [
        "ef2967ab59ebaabe2892c8c15412f997d6fa80b1"
      ],
      "author": {
        "name": "Aryk Ledet",
        "email": "arykledet@google.com",
        "time": "Fri May 17 03:00:32 2024 +0000"
      },
      "committer": {
        "name": "Aryk Ledet",
        "email": "arykledet@google.com",
        "time": "Tue May 21 22:35:52 2024 +0000"
      },
      "message": "Add polymorphic cper encoder class\n\nThis class is intended to be the base of other CperEncoders, the\nmockEncoder is a generic example of how this would look.\n\nChange-Id: Ic0126a767ca8c2827ae32b6716c27c3b42803c5a\nSigned-off-by: Aryk Ledet \u003carykledet@google.com\u003e\n"
    },
    {
      "commit": "ef2967ab59ebaabe2892c8c15412f997d6fa80b1",
      "tree": "7489a5c67d85d603f452789eb4fce74c8d50ce32",
      "parents": [
        "9deb078a720743055163f0a6fe4e8bdf37c56047"
      ],
      "author": {
        "name": "Aryk Ledet",
        "email": "arykledet@google.com",
        "time": "Fri May 17 02:55:54 2024 +0000"
      },
      "committer": {
        "name": "Aryk Ledet",
        "email": "arykledet@google.com",
        "time": "Tue May 21 20:16:55 2024 +0000"
      },
      "message": "Add sequential memcpy helper object\n\nTested: Unit tests\nGoogle-Bug-Id: 322561358\nChange-Id: I980f82637e5f8b84daa29eb2b3b9bd4c6ad75594\nSigned-off-by: Aryk Ledet \u003carykledet@google.com\u003e\n"
    },
    {
      "commit": "9deb078a720743055163f0a6fe4e8bdf37c56047",
      "tree": "740dc980934fe6a004c5b48a55e055e643575d80",
      "parents": [
        "712fb1094872753a08b8dc68c55cbbddc08b8105"
      ],
      "author": {
        "name": "Aryk Ledet",
        "email": "arykledet@google.com",
        "time": "Fri May 17 02:39:30 2024 +0000"
      },
      "committer": {
        "name": "Aryk Ledet",
        "email": "arykledet@google.com",
        "time": "Tue May 21 20:16:49 2024 +0000"
      },
      "message": "Add timestamp helper function\n\nAdds a helper function to convert chrono time points into a UEFI CPER\nrecord header timestamp specification.\n\nTested: Unit test\nGoogle-Bug-Id: 322561358\nChange-Id: I75cbce7db4c6f348d96d028598f00360f4154e20\nSigned-off-by: Aryk Ledet \u003carykledet@google.com\u003e\n"
    },
    {
      "commit": "712fb1094872753a08b8dc68c55cbbddc08b8105",
      "tree": "c28ede07dd47c4662dc1b1ea3659bccfe270e06b",
      "parents": [
        "7bce849a76b712d886f090468ebf07910e1af4e7"
      ],
      "author": {
        "name": "Aryk Ledet",
        "email": "arykledet@google.com",
        "time": "Thu May 16 23:58:10 2024 +0000"
      },
      "committer": {
        "name": "Aryk Ledet",
        "email": "arykledet@google.com",
        "time": "Thu May 16 23:58:10 2024 +0000"
      },
      "message": "Add cper and guid definitions\n\n- Added cper.hpp and guid.hpp to define uefi specifications\n- Added a basic README\n- Added a basic unit test\n\nTested: Unit tests\nGoogle-Bug-Id: 322561358\nChange-Id: I7019e2c11820a0a3c6ba9cc8aed58555e2a08b4f\nSigned-off-by: Aryk Ledet \u003carykledet@google.com\u003e\n"
    },
    {
      "commit": "7bce849a76b712d886f090468ebf07910e1af4e7",
      "tree": "dbfbba30d7e817cfc850ad7f3c4a6fa4f74e5c49",
      "parents": [
        "d7bb3a200f6bddf66c25102cc3fdf10a3eac7413"
      ],
      "author": {
        "name": "Aryk Ledet",
        "email": "arykledet@google.com",
        "time": "Tue May 14 00:29:17 2024 +0000"
      },
      "committer": {
        "name": "Aryk Ledet",
        "email": "arykledet@google.com",
        "time": "Wed May 15 16:19:02 2024 +0000"
      },
      "message": "Add License file\n\nTested: n/a\nGoogle-Bug-Id: 339720419\nChange-Id: Ibe48cfcf3d5abe04c2ddd2e9205d45c28c20ee45\nSigned-off-by: Aryk Ledet \u003carykledet@google.com\u003e\n"
    },
    {
      "commit": "d7bb3a200f6bddf66c25102cc3fdf10a3eac7413",
      "tree": "4b825dc642cb6eb9a060e54bf8d69288fbee4904",
      "parents": [],
      "author": {
        "name": "Benjamin Fair",
        "email": "benjaminfair@google.com",
        "time": "Mon May 13 22:03:42 2024 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon May 13 22:03:42 2024 +0000"
      },
      "message": "Initial empty repository\n"
    }
  ]
}
