Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 1dc0cb8

Browse files
author
Robert Marsh
committed
Merge branch 'master' of github.com:Semmle/ql into rdmarsh/cpp/ir-constructor-side-effects
2 parents 2582b69 + 2b89139 commit 1dc0cb8

27 files changed

Lines changed: 596 additions & 394 deletions

File tree

change-notes/1.23/analysis-javascript.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
## General improvements
44

5+
* Automatic classification of generated and minified files has been improved, in particular files generated by Doxygen are now recognized.
6+
57
* Support for `globalThis` has been added.
68

79
* Support for the following frameworks and libraries has been improved:
@@ -14,8 +16,6 @@
1416

1517
* TypeScript 3.6 and 3.7 features are now supported.
1618

17-
* Automatic classification of generated files has been improved, in particular files generated by Doxygen are now recognized.
18-
1919
## New queries
2020

2121
| **Query** | **Tags** | **Purpose** |

cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedDeclarationEntry.qll

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,8 @@ abstract class TranslatedVariableDeclaration extends TranslatedElement, Initiali
121121
private predicate hasUninitializedInstruction() {
122122
not exists(getInitialization()) or
123123
getInitialization() instanceof TranslatedListInitialization or
124-
getInitialization() instanceof TranslatedConstructorInitialization
124+
getInitialization() instanceof TranslatedConstructorInitialization or
125+
getInitialization().(TranslatedStringLiteralInitialization).zeroInitRange(_, _)
125126
}
126127
}
127128

cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedInitialization.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ class TranslatedStringLiteralInitialization extends TranslatedDirectInitializati
340340
* Holds if the `elementCount` array elements starting at `startIndex` must be
341341
* zero initialized.
342342
*/
343-
private predicate zeroInitRange(int startIndex, int elementCount) {
343+
predicate zeroInitRange(int startIndex, int elementCount) {
344344
exists(int targetCount |
345345
startIndex = expr.getUnspecifiedType().(ArrayType).getArraySize() and
346346
targetCount = getContext().getTargetType().getUnspecifiedType().(ArrayType).getArraySize() and

cpp/ql/test/library-tests/ir/ir/raw_ir.expected

Lines changed: 59 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -2700,64 +2700,65 @@ ir.cpp:
27002700
# 571| mu0_1(unknown) = AliasedDefinition :
27012701
# 571| mu0_2(unknown) = UnmodeledDefinition :
27022702
# 572| r0_3(glval<char[32]>) = VariableAddress[a_pad] :
2703-
# 572| r0_4(glval<char[1]>) = StringConstant[""] :
2704-
# 572| r0_5(char[1]) = Load : &:r0_4, ~mu0_2
2705-
# 572| mu0_6(char[1]) = Store : &:r0_3, r0_5
2706-
# 572| r0_7(unknown[31]) = Constant[0] :
2707-
# 572| r0_8(int) = Constant[1] :
2708-
# 572| r0_9(glval<char>) = PointerAdd[1] : r0_3, r0_8
2709-
# 572| mu0_10(unknown[31]) = Store : &:r0_9, r0_7
2710-
# 573| r0_11(glval<char[4]>) = VariableAddress[a_nopad] :
2711-
# 573| r0_12(glval<char[4]>) = StringConstant["foo"] :
2712-
# 573| r0_13(char[4]) = Load : &:r0_12, ~mu0_2
2713-
# 573| mu0_14(char[4]) = Store : &:r0_11, r0_13
2714-
# 574| r0_15(glval<char[5]>) = VariableAddress[a_infer] :
2715-
# 574| r0_16(glval<char[5]>) = StringConstant["blah"] :
2716-
# 574| r0_17(char[5]) = Load : &:r0_16, ~mu0_2
2717-
# 574| mu0_18(char[5]) = Store : &:r0_15, r0_17
2718-
# 575| r0_19(glval<char[2]>) = VariableAddress[b] :
2719-
# 575| mu0_20(char[2]) = Uninitialized[b] : &:r0_19
2720-
# 576| r0_21(glval<char[2]>) = VariableAddress[c] :
2721-
# 576| mu0_22(char[2]) = Uninitialized[c] : &:r0_21
2722-
# 576| r0_23(int) = Constant[0] :
2723-
# 576| r0_24(glval<char>) = PointerAdd[1] : r0_21, r0_23
2724-
# 576| r0_25(unknown[2]) = Constant[0] :
2725-
# 576| mu0_26(unknown[2]) = Store : &:r0_24, r0_25
2726-
# 577| r0_27(glval<char[2]>) = VariableAddress[d] :
2727-
# 577| mu0_28(char[2]) = Uninitialized[d] : &:r0_27
2728-
# 577| r0_29(int) = Constant[0] :
2729-
# 577| r0_30(glval<char>) = PointerAdd[1] : r0_27, r0_29
2730-
# 577| r0_31(char) = Constant[0] :
2731-
# 577| mu0_32(char) = Store : &:r0_30, r0_31
2732-
# 577| r0_33(int) = Constant[1] :
2733-
# 577| r0_34(glval<char>) = PointerAdd[1] : r0_27, r0_33
2734-
# 577| r0_35(char) = Constant[0] :
2735-
# 577| mu0_36(char) = Store : &:r0_34, r0_35
2736-
# 578| r0_37(glval<char[2]>) = VariableAddress[e] :
2737-
# 578| mu0_38(char[2]) = Uninitialized[e] : &:r0_37
2738-
# 578| r0_39(int) = Constant[0] :
2739-
# 578| r0_40(glval<char>) = PointerAdd[1] : r0_37, r0_39
2740-
# 578| r0_41(char) = Constant[0] :
2741-
# 578| mu0_42(char) = Store : &:r0_40, r0_41
2742-
# 578| r0_43(int) = Constant[1] :
2743-
# 578| r0_44(glval<char>) = PointerAdd[1] : r0_37, r0_43
2744-
# 578| r0_45(char) = Constant[1] :
2745-
# 578| mu0_46(char) = Store : &:r0_44, r0_45
2746-
# 579| r0_47(glval<char[3]>) = VariableAddress[f] :
2747-
# 579| mu0_48(char[3]) = Uninitialized[f] : &:r0_47
2748-
# 579| r0_49(int) = Constant[0] :
2749-
# 579| r0_50(glval<char>) = PointerAdd[1] : r0_47, r0_49
2750-
# 579| r0_51(char) = Constant[0] :
2751-
# 579| mu0_52(char) = Store : &:r0_50, r0_51
2752-
# 579| r0_53(int) = Constant[1] :
2753-
# 579| r0_54(glval<char>) = PointerAdd[1] : r0_47, r0_53
2754-
# 579| r0_55(unknown[2]) = Constant[0] :
2755-
# 579| mu0_56(unknown[2]) = Store : &:r0_54, r0_55
2756-
# 580| v0_57(void) = NoOp :
2757-
# 571| v0_58(void) = ReturnVoid :
2758-
# 571| v0_59(void) = UnmodeledUse : mu*
2759-
# 571| v0_60(void) = AliasedUse : ~mu0_2
2760-
# 571| v0_61(void) = ExitFunction :
2703+
# 572| mu0_4(char[32]) = Uninitialized[a_pad] : &:r0_3
2704+
# 572| r0_5(glval<char[1]>) = StringConstant[""] :
2705+
# 572| r0_6(char[1]) = Load : &:r0_5, ~mu0_2
2706+
# 572| mu0_7(char[1]) = Store : &:r0_3, r0_6
2707+
# 572| r0_8(unknown[31]) = Constant[0] :
2708+
# 572| r0_9(int) = Constant[1] :
2709+
# 572| r0_10(glval<char>) = PointerAdd[1] : r0_3, r0_9
2710+
# 572| mu0_11(unknown[31]) = Store : &:r0_10, r0_8
2711+
# 573| r0_12(glval<char[4]>) = VariableAddress[a_nopad] :
2712+
# 573| r0_13(glval<char[4]>) = StringConstant["foo"] :
2713+
# 573| r0_14(char[4]) = Load : &:r0_13, ~mu0_2
2714+
# 573| mu0_15(char[4]) = Store : &:r0_12, r0_14
2715+
# 574| r0_16(glval<char[5]>) = VariableAddress[a_infer] :
2716+
# 574| r0_17(glval<char[5]>) = StringConstant["blah"] :
2717+
# 574| r0_18(char[5]) = Load : &:r0_17, ~mu0_2
2718+
# 574| mu0_19(char[5]) = Store : &:r0_16, r0_18
2719+
# 575| r0_20(glval<char[2]>) = VariableAddress[b] :
2720+
# 575| mu0_21(char[2]) = Uninitialized[b] : &:r0_20
2721+
# 576| r0_22(glval<char[2]>) = VariableAddress[c] :
2722+
# 576| mu0_23(char[2]) = Uninitialized[c] : &:r0_22
2723+
# 576| r0_24(int) = Constant[0] :
2724+
# 576| r0_25(glval<char>) = PointerAdd[1] : r0_22, r0_24
2725+
# 576| r0_26(unknown[2]) = Constant[0] :
2726+
# 576| mu0_27(unknown[2]) = Store : &:r0_25, r0_26
2727+
# 577| r0_28(glval<char[2]>) = VariableAddress[d] :
2728+
# 577| mu0_29(char[2]) = Uninitialized[d] : &:r0_28
2729+
# 577| r0_30(int) = Constant[0] :
2730+
# 577| r0_31(glval<char>) = PointerAdd[1] : r0_28, r0_30
2731+
# 577| r0_32(char) = Constant[0] :
2732+
# 577| mu0_33(char) = Store : &:r0_31, r0_32
2733+
# 577| r0_34(int) = Constant[1] :
2734+
# 577| r0_35(glval<char>) = PointerAdd[1] : r0_28, r0_34
2735+
# 577| r0_36(char) = Constant[0] :
2736+
# 577| mu0_37(char) = Store : &:r0_35, r0_36
2737+
# 578| r0_38(glval<char[2]>) = VariableAddress[e] :
2738+
# 578| mu0_39(char[2]) = Uninitialized[e] : &:r0_38
2739+
# 578| r0_40(int) = Constant[0] :
2740+
# 578| r0_41(glval<char>) = PointerAdd[1] : r0_38, r0_40
2741+
# 578| r0_42(char) = Constant[0] :
2742+
# 578| mu0_43(char) = Store : &:r0_41, r0_42
2743+
# 578| r0_44(int) = Constant[1] :
2744+
# 578| r0_45(glval<char>) = PointerAdd[1] : r0_38, r0_44
2745+
# 578| r0_46(char) = Constant[1] :
2746+
# 578| mu0_47(char) = Store : &:r0_45, r0_46
2747+
# 579| r0_48(glval<char[3]>) = VariableAddress[f] :
2748+
# 579| mu0_49(char[3]) = Uninitialized[f] : &:r0_48
2749+
# 579| r0_50(int) = Constant[0] :
2750+
# 579| r0_51(glval<char>) = PointerAdd[1] : r0_48, r0_50
2751+
# 579| r0_52(char) = Constant[0] :
2752+
# 579| mu0_53(char) = Store : &:r0_51, r0_52
2753+
# 579| r0_54(int) = Constant[1] :
2754+
# 579| r0_55(glval<char>) = PointerAdd[1] : r0_48, r0_54
2755+
# 579| r0_56(unknown[2]) = Constant[0] :
2756+
# 579| mu0_57(unknown[2]) = Store : &:r0_55, r0_56
2757+
# 580| v0_58(void) = NoOp :
2758+
# 571| v0_59(void) = ReturnVoid :
2759+
# 571| v0_60(void) = UnmodeledUse : mu*
2760+
# 571| v0_61(void) = AliasedUse : ~mu0_2
2761+
# 571| v0_62(void) = ExitFunction :
27612762

27622763
# 584| void VarArgs()
27632764
# 584| Block 0

0 commit comments

Comments
 (0)