1// SPDX-License-Identifier: GPL-2.0 2/// Make sure (of/i2c/platform)_device_id tables are NULL terminated 3// 4// Keywords: of_table i2c_table platform_table 5// Confidence: Medium 6// Options: --include-headers 7 8virtual patch 9virtual context 10virtual org 11virtual report 12 13@depends on context@ 14identifier var, arr; 15expression E; 16@@ 17( 18struct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = { 19 ..., 20 { 21 .var = E, 22* } 23}; 24| 25struct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = { 26 ..., 27* { ..., E, ... }, 28}; 29) 30 31@depends on patch@ 32identifier var, arr; 33expression E; 34@@ 35( 36struct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = { 37 ..., 38 { 39 .var = E, 40- } 41+ }, 42+ { } 43}; 44| 45struct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = { 46 ..., 47 { ..., E, ... }, 48+ { }, 49}; 50) 51 52@r depends on org || report@ 53position p1; 54identifier var, arr; 55expression E; 56@@ 57( 58struct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = { 59 ..., 60 { 61 .var = E, 62 } 63 @p1 64}; 65| 66struct \(of_device_id \| i2c_device_id \| platform_device_id\) arr[] = { 67 ..., 68 { ..., E, ... } 69 @p1 70}; 71) 72 73@script:python depends on org@ 74p1 << r.p1; 75arr << r.arr; 76@@ 77 78cocci.print_main(arr,p1) 79 80@script:python depends on report@ 81p1 << r.p1; 82arr << r.arr; 83@@ 84 85msg = "%s is not NULL terminated at line %s" % (arr, p1[0].line) 86coccilib.report.print_report(p1[0],msg) 87