Blob Blame History Raw
From 4e29e6d5687cf25ac16e48ad41498526e6a56ca8 Mon Sep 17 00:00:00 2001
From: Lianbo Jiang <lijiang@redhat.com>
Date: Sun, 28 Apr 2019 14:06:59 +0800
Subject: [PATCH] Fix memory type detail map size

Note: (https://github.com/nima/python-dmidecode/pull/5/commits/
edca64c89d084a8c42b9c48a51eb5ac13eac52c6)

For index and array size in xml map, bit mapped type descriptions
array size must be kept coerent with bit mask otherwise it could
cause an error, e.g:

Python 3.6.8 (default, Apr  3 2019, 12:10:30)
[GCC 8.2.1 20180905 (Red Hat 8.2.1-3)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import dmidecode
>>> dmidecode.memory()
IndexError: list assignment index out of range

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
SystemError: <built-in function memory> returned a result with an error set

Signed-off-by: Lianbo Jiang <lijiang@redhat.com>
---
 src/dmidecode.c | 4 ++--
 src/pymap.xml   | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/dmidecode.c b/src/dmidecode.c
index 0615bad315fb..d74a374a3a0f 100644
--- a/src/dmidecode.c
+++ b/src/dmidecode.c
@@ -2905,9 +2905,9 @@ void dmi_memory_device_type_detail(xmlNode *node, u16 code)
         dmixml_AddAttribute(data_n, "dmispec", "7.18.3");
         dmixml_AddAttribute(data_n, "flags", "0x%04x", code);
 
-        if((code & 0x1FFE) != 0) {
+        if((code & 0xFFFE) != 0) {
                 int i;
-                for(i = 1; i <= 14; i++) {
+                for(i = 1; i <= 15; i++) {
                         if(code & (1 << i)) {
                                 xmlNode *td_n = dmixml_AddTextChild(data_n, "flag", "%s", detail[i - 1]);
                                 assert( td_n != NULL );
diff --git a/src/pymap.xml b/src/pymap.xml
index 7d5de70bda65..7325a8527018 100644
--- a/src/pymap.xml
+++ b/src/pymap.xml
@@ -440,7 +440,7 @@
               valuetype="string" value="concat(TotalWidth, ' ', TotalWidth/@unit)"/>
           <Map keytype="constant" key="AssetTag" valuetype="string" value="AssetTag"/>
           <Map keytype="constant" key="Type Detail" valuetype="list:string" value="TypeDetails/flag"
-              fixedsize="12" index_attr="index"/>
+              fixedsize="15" index_attr="index"/>
           <Map keytype="constant" key="Array Handle" valuetype="string" value="@ArrayHandle"/>
           <Map keytype="constant" key="Form Factor" valuetype="string" value="FormFactor"/>
           <Map keytype="constant" key="Size"
-- 
2.17.1