Commit Graph

13956 Commits

Author SHA1 Message Date
Ian Lynagh
95794f9227 C++: Handle values with no valuetext 2019-08-28 14:27:08 +01:00
Ian Lynagh
754612d257 C++: Split valuetext off into its own table 2019-08-28 14:09:13 +01:00
Jonas Jensen
d4f8e73a66 C++: Change name of UncheckedReturn...Functions.ql
The previous name was identical to the name of
`Adding365DaysPerYear.ql`. It may have been a copy-paste error.
2019-08-28 14:05:31 +02:00
AndreiDiaconu1
c74898ec9f Synced files
Synced the files that are needed for this PR
2019-08-28 12:25:14 +01:00
Dave Bartolomeo
609ca034c0 C#/C++: Share IR implementation 2019-08-28 12:25:13 +01:00
Jonas Jensen
2c253f360a C++: Support x-macros that are #undef'ed in header
This fixes a false positive on https://github.com/zduka/tpp.
2019-08-28 13:03:16 +02:00
Jonas Jensen
e7dfb3e61b C++: Test for x-macro FP observed in the wild 2019-08-28 13:03:09 +02:00
Jonas Jensen
8c610e4f68 C++: Don't use deprecated interface in test 2019-08-28 08:31:05 +02:00
Jonas Jensen
b98d6379e9 C++: Restore and deprecate getPosInBasicBlock
This predicte was still used in a test, so it might be used in external
code too.
2019-08-28 08:29:06 +02:00
Jonas Jensen
3700a631a6 C++: Performance fix for existsCompleteWithName 2019-08-27 16:28:57 +02:00
Jonas Jensen
4cae5917cb C++: Remove one nomagic and explain the other 2019-08-26 21:48:18 +02:00
Jonas Jensen
2332dada1a C++: s/pos/index/ in SubBasicBlocks 2019-08-26 21:35:58 +02:00
Jonas Jensen
92c354e8e8 C++: Simplify SubBasicBlock::getNumberOfNodes 2019-08-26 21:11:42 +02:00
Jonas Jensen
2b94bb9eda C++: Use the word "rank" to denote a rank
Previously, the word "position" was used ambiguously in this library.
2019-08-26 16:13:08 +02:00
Jonas Jensen
17ee3f555c C++: Sync the two copies of SubBasicBlocks.qll
These files are now added to `identical-files.json` so they will remain
in sync.
2019-08-26 16:01:36 +02:00
Pavel Avgustinov
deacc23465 Merge pull request #1824 from jbj/sbb-perf
C++: Optimize SubBasicBlocks library
2019-08-26 13:02:43 +01:00
Jonas Jensen
5e674825e3 C++: Optimize SubBasicBlock::getPosInBasicBlock() 2019-08-26 12:47:40 +02:00
Jonas Jensen
d4f1cf97fd C++: Optimize SubBasicBlock::getNode(int) 2019-08-26 12:22:37 +02:00
Jonas Jensen
be24c6418b C++: Optimize SubBasicBlock::getNumberOfNodes() 2019-08-26 12:22:34 +02:00
Jonas Jensen
27b6ed3be4 Merge pull request #1822 from pavgust/fix/multiloc-defs
definitions.qll: Suppress multi-location links.
2019-08-26 10:50:21 +02:00
Ziemowit Laski
7f00d3fdf3 [PR/1660] Fix up charpred. 2019-08-25 20:34:18 -07:00
zlaski-semmle
c276d0b8ac Merge pull request #1770 from geoffw0/qldoceg7
CPP: Add syntax examples to QLDoc in various files
2019-08-25 20:15:51 -07:00
Ziemowit Laski
161b0e2f5b [PR/1660] Rename BuiltinVarList to BuiltinVarArgsList. 2019-08-25 19:44:37 -07:00
Pavel Avgustinov
b9b0c3bc5d definitions.qll: Suppress multi-location links. 2019-08-25 15:59:17 +01:00
Jonas Jensen
52e4058903 C++: Fix lambda_capture upgrade query join order
When this query was run as an upgrade script, the optimizer picked a bad
join order, making the upgrade very slow on large databases. It picked a
bad join order because upgrade scripts are run with no stats.
2019-08-24 15:33:50 +02:00
Anders Schack-Mulligen
2bea0a459a Java/C++/C#: Sync. 2019-08-23 11:34:17 +02:00
Geoffrey White
fbeb79729b CPP: Upgrade script. 2019-08-23 08:44:30 +01:00
Geoffrey White
cf6ada5758 CPP: Update stats. 2019-08-23 08:44:29 +01:00
Geoffrey White
29000c411c CPP: Make LambdaCapture an Element. 2019-08-23 08:44:29 +01:00
Geoffrey White
6462da736b CPP: Another test case. 2019-08-23 08:44:29 +01:00
Geoffrey White
19a0d4697e CPP: More thorough test of LambdaCapture. 2019-08-23 08:44:29 +01:00
Robert Marsh
23b74b5521 Merge pull request #1750 from dave-bartolomeo/dave/ZooKeeper
C++: Minimal IR support for `GNUVectorType`
2019-08-22 14:34:59 -07:00
Calum Grant
ff20a2ceb9 Merge pull request #1761 from hvitved/csharp/dataflow/fields
C#: Data flow through fields
2019-08-22 20:46:00 +01:00
Dave Bartolomeo
a84a7e8c8a C++: Fixup after rebase 2019-08-22 11:36:15 -07:00
Dave Bartolomeo
8a9528b1a8 C++: Accept test output after fixes for PointerAdd element sizes 2019-08-22 10:43:31 -07:00
Dave Bartolomeo
3108d97ea5 C++: Minimal IR support for GNUVectorType
Lack of support for the GCC vector extensions was causing a bunch of sanity failures in the syntax zoo. This PR adds minimal IR generation support for these types.

Added `VectorAggregateLiteral`, and factored most of `ArrayAggregateLiteral` out into the common base class `ArrayOrVectorAggregateLiteral`. I'd be happy to merge these all into `ArrayAggregateLiteral` if we don't care about the distinction.

Made a few tweaks to `TranslatedArrayExpr` to compute the element type by looking at the result type of the `ArrayExpr`, not the type of the base operand. Note that this means that for `T a[10]; a[i] = foo;`, the result of the `PointerAdd` for `a[i]` will now be `glvalue<T>`, not `T*`. This is actually more faithful to the source language, and has no semantic difference on the IR.

Added some missing `getInstructionElementSize()` overrides.

Added the new `BuiltIn` opcode, renamed the existing `BuiltInInstruction` to `BuiltInOperationInstruction`, and made any `BuiltInOperation` that we don't specifically handle translate to `BuiltIn`. `BuiltInOperationInstruction` now has a way to get the specific `BuiltInOperation`.

Added `getCanonicalQLClass()` overrides for `GNUVectorType` and `BuiltInOperation`.

Added a simple IR test for vector types.
2019-08-22 10:43:30 -07:00
Jonas Jensen
f5a63e3a91 Merge pull request #1801 from geoffw0/lambdar
CPP: Update taint test comments.
2019-08-22 18:45:41 +02:00
Nick Rolfe
bea1f687e7 Merge pull request #1796 from mgrettondann/enable-usingentry-getenclosingelement
C++: Add support for UsingEntry.getEnclosingElement
2019-08-22 17:01:57 +01:00
Geoffrey White
a70975f95f CPP: Update test comments. 2019-08-22 15:40:38 +01:00
Geoffrey White
c007d4ffd7 Merge pull request #1781 from jbj/dataflow-location-workaround
C++: Workaround for lambda expression locations
2019-08-22 15:36:22 +01:00
Matthew Gretton-Dann
855ce8dd9d C++: Add support for UsingEntry.getEnclosingElement 2019-08-22 14:23:38 +01:00
Tom Hvitved
0801e51175 Merge pull request #1790 from jbj/tainttracking-cross-language
C++/C#/Java: Shared TaintTrackingImpl.qll
2019-08-22 14:17:23 +02:00
Jonas Jensen
d38dbf0f63 C++: Workaround for lambda expression locations
See CPP-427.
2019-08-22 11:52:56 +02:00
Jonas Jensen
ad9ee54b65 C++/C#/Java: defaultAdditionalTaintStep 2019-08-22 11:14:06 +02:00
Robert Marsh
1b6339528c Merge pull request #1783 from jbj/taint-fields-structs
C++: Don't propagate taint between field and struct [CPP-410]
2019-08-21 11:20:26 -07:00
Tom Hvitved
a2ffddec5f Merge pull request #1785 from jbj/dataflow-recursion-prevention-shared
C++/C#/Java: Pyrameterize ConfigurationRecursionPrevention
2019-08-21 15:56:50 +02:00
Jonas Jensen
25701f203d C++/C#/Java: Shared TaintTrackingImpl.qll
This file is now identical in all languages. Unifying this file led to
the following changes:
- The documentation spelling fixes and example from the C++ version
  were copied to the other versions and updated.
- The steps through `NonLocalJumpNode` from C# were abstracted into a
  `globalAdditionalTaintStep` predicate that's empty for C++ and Java.
- The `defaultTaintBarrier` predicate from Java is now present but empty
  on C++ and C#.
- The C++ `isAdditionalFlowStep` predicate on
  `TaintTracking::Configuration` no longer includes `localFlowStep`.
  That should avoid some unnecessary tuple copying.
2019-08-21 14:55:54 +02:00
Jonas Jensen
863bf523d6 C++/C#/Java: Autoformat 2019-08-21 13:24:01 +02:00
Jonas Jensen
fdd3b901f7 C/C#/Java: Share ConfigurationRecursionPrevention
This class was copy-pasted in all `DataFlowN.qll` files without using
the identical-files system to keep the copies in sync. The class is now
moved to the `DataFlowImplN.qll` files.

This also has the effect of preventing recursion through first data flow
library copy for C/C++. Such recursion has been deprecated for over a
year, and some forms of recursions are already ruled out by the library
implementation.
2019-08-21 13:04:10 +02:00
Jonas Jensen
2f4ed45dac C++: No taint between field and struct
To compensate for the lack of field flow, the taint tracking library has
previously considered taint to flow from fields to their containing
structs and back again from the structs to any of their fields. This
leads to false flow between unrelated fields and is not needed now that
we have proper flow through fields.
2019-08-21 11:57:12 +02:00