Skip to content

Commit fa2d84c

Browse files
authored
Merge pull request #10338 from hmac/hmac/ar-model-create
Ruby: Treat ActiveRecord::Base.create as a model instantiation
2 parents e7d19e8 + 0e5aa97 commit fa2d84c

File tree

5 files changed

+50
-31
lines changed

5 files changed

+50
-31
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
category: minorAnalysis
3+
---
4+
* Calls to `ActiveRecord::Base.create` are now recognized as model
5+
instantiations.

ruby/ql/lib/codeql/ruby/frameworks/ActiveRecord.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ private string staticFinderMethodName() {
255255
result = baseName + ["", "!"]
256256
)
257257
or
258-
result = "new"
258+
result = ["new", "create"]
259259
}
260260

261261
// Gets the "final" receiver in a chain of method calls.

ruby/ql/test/library-tests/frameworks/ActionController.expected

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
actionControllerControllerClasses
22
| active_record/ActiveRecord.rb:23:1:39:3 | FooController |
33
| active_record/ActiveRecord.rb:41:1:64:3 | BarController |
4-
| active_record/ActiveRecord.rb:66:1:94:3 | BazController |
5-
| active_record/ActiveRecord.rb:96:1:104:3 | AnnotatedController |
4+
| active_record/ActiveRecord.rb:66:1:98:3 | BazController |
5+
| active_record/ActiveRecord.rb:100:1:108:3 | AnnotatedController |
66
| active_storage/active_storage.rb:39:1:45:3 | PostsController |
77
| app/controllers/comments_controller.rb:1:1:7:3 | CommentsController |
88
| app/controllers/foo/bars_controller.rb:3:1:46:3 | BarsController |
@@ -17,11 +17,12 @@ actionControllerActionMethods
1717
| active_record/ActiveRecord.rb:71:3:73:5 | create1 |
1818
| active_record/ActiveRecord.rb:75:3:77:5 | create2 |
1919
| active_record/ActiveRecord.rb:79:3:81:5 | create3 |
20-
| active_record/ActiveRecord.rb:83:3:85:5 | update1 |
21-
| active_record/ActiveRecord.rb:87:3:89:5 | update2 |
22-
| active_record/ActiveRecord.rb:91:3:93:5 | update3 |
23-
| active_record/ActiveRecord.rb:97:3:99:5 | index |
24-
| active_record/ActiveRecord.rb:101:3:103:5 | unsafe_action |
20+
| active_record/ActiveRecord.rb:83:3:85:5 | create4 |
21+
| active_record/ActiveRecord.rb:87:3:89:5 | update1 |
22+
| active_record/ActiveRecord.rb:91:3:93:5 | update2 |
23+
| active_record/ActiveRecord.rb:95:3:97:5 | update3 |
24+
| active_record/ActiveRecord.rb:101:3:103:5 | index |
25+
| active_record/ActiveRecord.rb:105:3:107:5 | unsafe_action |
2526
| active_storage/active_storage.rb:40:3:44:5 | create |
2627
| app/controllers/comments_controller.rb:2:3:3:5 | index |
2728
| app/controllers/comments_controller.rb:5:3:6:5 | show |
@@ -55,12 +56,12 @@ paramsCalls
5556
| active_record/ActiveRecord.rb:76:49:76:54 | call to params |
5657
| active_record/ActiveRecord.rb:80:25:80:30 | call to params |
5758
| active_record/ActiveRecord.rb:80:50:80:55 | call to params |
58-
| active_record/ActiveRecord.rb:84:21:84:26 | call to params |
59-
| active_record/ActiveRecord.rb:88:27:88:32 | call to params |
60-
| active_record/ActiveRecord.rb:88:52:88:57 | call to params |
61-
| active_record/ActiveRecord.rb:92:28:92:33 | call to params |
62-
| active_record/ActiveRecord.rb:92:53:92:58 | call to params |
63-
| active_record/ActiveRecord.rb:102:59:102:64 | call to params |
59+
| active_record/ActiveRecord.rb:88:21:88:26 | call to params |
60+
| active_record/ActiveRecord.rb:92:27:92:32 | call to params |
61+
| active_record/ActiveRecord.rb:92:52:92:57 | call to params |
62+
| active_record/ActiveRecord.rb:96:28:96:33 | call to params |
63+
| active_record/ActiveRecord.rb:96:53:96:58 | call to params |
64+
| active_record/ActiveRecord.rb:106:59:106:64 | call to params |
6465
| active_storage/active_storage.rb:41:21:41:26 | call to params |
6566
| active_storage/active_storage.rb:42:24:42:29 | call to params |
6667
| app/controllers/foo/bars_controller.rb:13:21:13:26 | call to params |
@@ -87,12 +88,12 @@ paramsSources
8788
| active_record/ActiveRecord.rb:76:49:76:54 | call to params |
8889
| active_record/ActiveRecord.rb:80:25:80:30 | call to params |
8990
| active_record/ActiveRecord.rb:80:50:80:55 | call to params |
90-
| active_record/ActiveRecord.rb:84:21:84:26 | call to params |
91-
| active_record/ActiveRecord.rb:88:27:88:32 | call to params |
92-
| active_record/ActiveRecord.rb:88:52:88:57 | call to params |
93-
| active_record/ActiveRecord.rb:92:28:92:33 | call to params |
94-
| active_record/ActiveRecord.rb:92:53:92:58 | call to params |
95-
| active_record/ActiveRecord.rb:102:59:102:64 | call to params |
91+
| active_record/ActiveRecord.rb:88:21:88:26 | call to params |
92+
| active_record/ActiveRecord.rb:92:27:92:32 | call to params |
93+
| active_record/ActiveRecord.rb:92:52:92:57 | call to params |
94+
| active_record/ActiveRecord.rb:96:28:96:33 | call to params |
95+
| active_record/ActiveRecord.rb:96:53:96:58 | call to params |
96+
| active_record/ActiveRecord.rb:106:59:106:64 | call to params |
9697
| active_storage/active_storage.rb:41:21:41:26 | call to params |
9798
| active_storage/active_storage.rb:42:24:42:29 | call to params |
9899
| app/controllers/foo/bars_controller.rb:13:21:13:26 | call to params |

ruby/ql/test/library-tests/frameworks/active_record/ActiveRecord.expected

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ activeRecordInstances
1616
| ActiveRecord.rb:56:7:56:40 | call to find_by |
1717
| ActiveRecord.rb:60:5:60:33 | call to find_by |
1818
| ActiveRecord.rb:62:5:62:34 | call to find |
19+
| ActiveRecord.rb:72:5:72:24 | call to create |
20+
| ActiveRecord.rb:76:5:76:66 | call to create |
21+
| ActiveRecord.rb:80:5:80:68 | call to create |
22+
| ActiveRecord.rb:84:5:84:16 | call to create |
1923
| associations.rb:19:1:19:20 | ... = ... |
2024
| associations.rb:19:1:19:20 | ... = ... |
2125
| associations.rb:19:11:19:20 | call to new |
@@ -109,7 +113,7 @@ activeRecordSqlExecutionRanges
109113
| ActiveRecord.rb:46:20:46:32 | ... + ... |
110114
| ActiveRecord.rb:52:16:52:28 | "name #{...}" |
111115
| ActiveRecord.rb:56:20:56:39 | "username = #{...}" |
112-
| ActiveRecord.rb:102:27:102:76 | "this is an unsafe annotation:..." |
116+
| ActiveRecord.rb:106:27:106:76 | "this is an unsafe annotation:..." |
113117
activeRecordModelClassMethodCalls
114118
| ActiveRecord.rb:2:3:2:17 | call to has_many |
115119
| ActiveRecord.rb:6:3:6:24 | call to belongs_to |
@@ -135,11 +139,12 @@ activeRecordModelClassMethodCalls
135139
| ActiveRecord.rb:72:5:72:24 | call to create |
136140
| ActiveRecord.rb:76:5:76:66 | call to create |
137141
| ActiveRecord.rb:80:5:80:68 | call to create |
138-
| ActiveRecord.rb:84:5:84:27 | call to update |
139-
| ActiveRecord.rb:88:5:88:69 | call to update |
140-
| ActiveRecord.rb:92:5:92:71 | call to update |
141-
| ActiveRecord.rb:98:13:98:54 | call to annotate |
142-
| ActiveRecord.rb:102:13:102:77 | call to annotate |
142+
| ActiveRecord.rb:84:5:84:16 | call to create |
143+
| ActiveRecord.rb:88:5:88:27 | call to update |
144+
| ActiveRecord.rb:92:5:92:69 | call to update |
145+
| ActiveRecord.rb:96:5:96:71 | call to update |
146+
| ActiveRecord.rb:102:13:102:54 | call to annotate |
147+
| ActiveRecord.rb:106:13:106:77 | call to annotate |
143148
| associations.rb:2:3:2:17 | call to has_many |
144149
| associations.rb:6:3:6:20 | call to belongs_to |
145150
| associations.rb:7:3:7:20 | call to has_many |
@@ -158,7 +163,7 @@ potentiallyUnsafeSqlExecutingMethodCall
158163
| ActiveRecord.rb:46:5:46:33 | call to delete_by |
159164
| ActiveRecord.rb:52:5:52:29 | call to order |
160165
| ActiveRecord.rb:56:7:56:40 | call to find_by |
161-
| ActiveRecord.rb:102:13:102:77 | call to annotate |
166+
| ActiveRecord.rb:106:13:106:77 | call to annotate |
162167
activeRecordModelInstantiations
163168
| ActiveRecord.rb:9:5:9:68 | call to find | ActiveRecord.rb:5:1:15:3 | User |
164169
| ActiveRecord.rb:13:5:13:40 | call to find_by | ActiveRecord.rb:1:1:3:3 | UserGroup |
@@ -167,6 +172,10 @@ activeRecordModelInstantiations
167172
| ActiveRecord.rb:56:7:56:40 | call to find_by | ActiveRecord.rb:5:1:15:3 | User |
168173
| ActiveRecord.rb:60:5:60:33 | call to find_by | ActiveRecord.rb:5:1:15:3 | User |
169174
| ActiveRecord.rb:62:5:62:34 | call to find | ActiveRecord.rb:5:1:15:3 | User |
175+
| ActiveRecord.rb:72:5:72:24 | call to create | ActiveRecord.rb:17:1:21:3 | Admin |
176+
| ActiveRecord.rb:76:5:76:66 | call to create | ActiveRecord.rb:17:1:21:3 | Admin |
177+
| ActiveRecord.rb:80:5:80:68 | call to create | ActiveRecord.rb:17:1:21:3 | Admin |
178+
| ActiveRecord.rb:84:5:84:16 | call to create | ActiveRecord.rb:17:1:21:3 | Admin |
170179
| associations.rb:19:11:19:20 | call to new | associations.rb:1:1:3:3 | Author |
171180
| associations.rb:21:9:21:21 | call to posts | associations.rb:5:1:9:3 | Post |
172181
| associations.rb:21:9:21:28 | call to create | associations.rb:5:1:9:3 | Post |
@@ -213,8 +222,8 @@ persistentWriteAccesses
213222
| ActiveRecord.rb:76:5:76:66 | call to create | ActiveRecord.rb:76:49:76:65 | ...[...] |
214223
| ActiveRecord.rb:80:5:80:68 | call to create | ActiveRecord.rb:80:25:80:37 | ...[...] |
215224
| ActiveRecord.rb:80:5:80:68 | call to create | ActiveRecord.rb:80:50:80:66 | ...[...] |
216-
| ActiveRecord.rb:84:5:84:27 | call to update | ActiveRecord.rb:84:21:84:26 | call to params |
217-
| ActiveRecord.rb:88:5:88:69 | call to update | ActiveRecord.rb:88:27:88:39 | ...[...] |
218-
| ActiveRecord.rb:88:5:88:69 | call to update | ActiveRecord.rb:88:52:88:68 | ...[...] |
219-
| ActiveRecord.rb:92:5:92:71 | call to update | ActiveRecord.rb:92:21:92:70 | call to [] |
225+
| ActiveRecord.rb:88:5:88:27 | call to update | ActiveRecord.rb:88:21:88:26 | call to params |
226+
| ActiveRecord.rb:92:5:92:69 | call to update | ActiveRecord.rb:92:27:92:39 | ...[...] |
227+
| ActiveRecord.rb:92:5:92:69 | call to update | ActiveRecord.rb:92:52:92:68 | ...[...] |
228+
| ActiveRecord.rb:96:5:96:71 | call to update | ActiveRecord.rb:96:21:96:70 | call to [] |
220229
| associations.rb:31:16:31:22 | ... = ... | associations.rb:31:16:31:22 | author2 |

ruby/ql/test/library-tests/frameworks/active_record/ActiveRecord.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,10 @@ def create3
8080
Admin.create({name: params[:name], password: params[:password]})
8181
end
8282

83+
def create4
84+
Admin.create
85+
end
86+
8387
def update1
8488
Admin.update(1, params)
8589
end

0 commit comments

Comments
 (0)