diff --git a/addons/misra_9.py b/addons/misra_9.py index d047f09a2c1..47c0599327e 100644 --- a/addons/misra_9.py +++ b/addons/misra_9.py @@ -255,11 +255,21 @@ def parseInitializer(self, root, token): isFirstElement = False isDesignated = True - elif self.token.str == '{': + elif self.token.str == '{' or self.token.isString: nextChild = self.root.getNextChild() if self.root is not None else None if nextChild: - if nextChild.isArray or nextChild.isRecord: + if nextChild.isArray and self.token.isString: + # Zero initializer causes recursive initialization + nextChild.setInitialized(isDesignated) + if self.token == self.token.astParent.astOperand1 and self.token.astParent.astOperand2: + self.token = self.token.astParent.astOperand2 + self.ed.markAsCurrent() + self.ed = self.root.getNextChild() + else: + self.unwindAndContinue() + continue + elif nextChild.isArray or nextChild.isRecord: nextChild.unset() nextChild.setInitialized(isDesignated) self.ed = nextChild.getFirstValueElement() diff --git a/addons/test/misra/crash6.c b/addons/test/misra/crash6.c new file mode 100644 index 00000000000..bf77e5f650b --- /dev/null +++ b/addons/test/misra/crash6.c @@ -0,0 +1,17 @@ + + +typedef struct _tGames +{ + char magicdirname[10]; + unsigned int expectedmask; + unsigned char pictureorder[3]; +} tGames; + +static const tGames games[1]={ + {"Pawn", 1, {0,1,2}} +}; + + + + +