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

Skip to content

Commit adadd49

Browse files
committed
Python: Remove BuiltinFunctionObject module as it is clearer and more concise to use ModuleObject::builtin().
1 parent 98be27a commit adadd49

8 files changed

Lines changed: 28 additions & 82 deletions

File tree

python/ql/src/Expressions/Formatting/AdvancedFormatting.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ private predicate brace_pair(PossibleAdvancedFormatString fmt, int start, int en
107107
private predicate advanced_format_call(Call format_expr, PossibleAdvancedFormatString fmt, int args) {
108108
exists(CallNode call |
109109
call = format_expr.getAFlowNode() |
110-
call.getFunction().refersTo(BuiltinFunctionObject::format()) and call.getArg(0).refersTo(_, fmt.getAFlowNode()) and
110+
call.getFunction().refersTo(Object::builtin("format")) and call.getArg(0).refersTo(_, fmt.getAFlowNode()) and
111111
args = count(format_expr.getAnArg()) - 1
112112
or
113113
call.getFunction().(AttrNode).getObject("format").refersTo(_, fmt.getAFlowNode()) and

python/ql/src/Expressions/UseofApply.ql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,5 @@ import python
1313

1414
from CallNode call, ControlFlowNode func
1515
where
16-
major_version() = 2 and call.getFunction() = func and func.refersTo(BuiltinFunctionObject::apply())
16+
major_version() = 2 and call.getFunction() = func and func.refersTo(Object::builtin("apply"))
1717
select call, "Call to the obsolete builtin function 'apply'."

python/ql/src/Expressions/UseofInput.ql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,5 @@ import python
1414

1515
from CallNode call, Context context, ControlFlowNode func
1616
where
17-
context.getAVersion().includes(2, _) and call.getFunction() = func and func.refersTo(context, BuiltinFunctionObject::input(), _, _)
17+
context.getAVersion().includes(2, _) and call.getFunction() = func and func.refersTo(context, Object::builtin("input"), _, _)
1818
select call, "The unsafe built-in function 'input' is used."

python/ql/src/Resources/FileOpen.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ predicate function_should_close_parameter(Function func) {
128128
}
129129

130130
predicate function_opens_file(FunctionObject f) {
131-
f = BuiltinFunctionObject::open()
131+
f = Object::builtin("open")
132132
or
133133
exists(EssaVariable v, Return ret |
134134
ret.getScope() = f.getFunction() |

python/ql/src/Variables/UndefinedExport.ql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ predicate declaredInAll(Module m, StrConst name)
2424

2525
predicate mutates_globals(PythonModuleObject m) {
2626
exists(CallNode globals |
27-
globals = BuiltinFunctionObject::globals().getACall() and
27+
globals = Object::builtin("globals").(FunctionObject).getACall() and
2828
globals.getScope() = m.getModule() |
2929
exists(AttrNode attr | attr.getObject() = globals)
3030
or

python/ql/src/semmle/python/pointsto/Base.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ predicate function_can_never_return(FunctionObject func) {
196196
not exists(f.getAnExitNode())
197197
)
198198
or
199-
func = BuiltinFunctionObject::sysExit()
199+
func = ModuleObject::named("sys").attr("exit")
200200
}
201201

202202
/** Python specific sub-class of generic EssaNodeDefinition */

python/ql/src/semmle/python/types/FunctionObject.qll

Lines changed: 20 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -376,107 +376,53 @@ class BuiltinFunctionObject extends BuiltinCallable {
376376

377377
}
378378

379-
module BuiltinFunctionObject {
380-
381-
/** The builtin function apply (Python 2 only) */
382-
BuiltinFunctionObject apply() {
383-
result = Object::builtin("apply")
384-
}
385-
386-
/** The builtin function `hasattr` */
387-
BuiltinFunctionObject hasattr() {
388-
result = Object::builtin("hasattr")
389-
}
390-
391-
/** The builtin function `len` */
392-
BuiltinFunctionObject len() {
393-
result = Object::builtin("len")
394-
}
395-
396-
BuiltinFunctionObject format() {
397-
result = Object::builtin("format")
398-
}
399-
400-
/** The builtin function open */
401-
BuiltinFunctionObject open() {
402-
result = Object::builtin("open")
403-
}
404-
405-
/** The builtin function print (Python 2.7 upwards) */
406-
BuiltinFunctionObject print() {
407-
result = Object::builtin("print")
408-
}
409-
410-
/** The builtin function input (Python 2 only) */
411-
BuiltinFunctionObject input() {
412-
result = Object::builtin("input")
413-
}
414-
415-
/** The builtin function locals */
416-
BuiltinFunctionObject locals() {
417-
py_special_objects(result, "locals")
418-
}
419-
420-
/** The builtin function globals */
421-
BuiltinFunctionObject globals() {
422-
py_special_objects(result, "globals")
423-
}
424-
425-
/** The builtin function sys.exit */
426-
BuiltinFunctionObject sysExit() {
427-
py_cmembers_versioned(theSysModuleObject(), "exit", result, major_version().toString())
428-
}
429-
430-
}
431-
432-
433-
/** DEPRECATED -- Use `BuiltinFunctionObject::apply()` instead. */
379+
/** DEPRECATED -- Use `Object::builtin("apply")` instead. */
434380
Object theApplyFunction() {
435-
result = BuiltinFunctionObject::apply()
381+
result = Object::builtin("apply")
436382
}
437383

438-
/** DEPRECATED -- Use `BuiltinFunctionObject::hasattr()` instead. */
384+
/** DEPRECATED -- Use `Object::builtin("hasattr")` instead. */
439385
Object theHasattrFunction() {
440-
result = BuiltinFunctionObject::hasattr()
386+
result = Object::builtin("hasattr")
441387
}
442388

443-
/** DEPRECATED -- Use `BuiltinFunctionObject::len()` instead. */
389+
/** DEPRECATED -- Use `Object::builtin("len")` instead. */
444390
Object theLenFunction() {
445-
result = BuiltinFunctionObject::len()
391+
result = Object::builtin("len")
446392
}
447393

448-
/** DEPRECATED -- Use `BuiltinFunctionObject::format()` instead. */
394+
/** DEPRECATED -- Use `Object::builtin("format")` instead. */
449395
Object theFormatFunction() {
450-
result = BuiltinFunctionObject::format()
396+
result = Object::builtin("format")
451397
}
452398

453-
/** DEPRECATED -- Use `BuiltinFunctionObject::open()` instead. */
399+
/** DEPRECATED -- Use `Object::builtin("open")` instead. */
454400
Object theOpenFunction() {
455-
result = BuiltinFunctionObject::open()
401+
result = Object::builtin("open")
456402
}
457403

458-
/** DEPRECATED -- Use `BuiltinFunctionObject::print()` instead. */
404+
/** DEPRECATED -- Use `Object::builtin("print")` instead. */
459405
Object thePrintFunction() {
460-
result = BuiltinFunctionObject::print()
406+
result = Object::builtin("print")
461407
}
462408

463-
/** DEPRECATED -- Use `BuiltinFunctionObject::input()` instead. */
409+
/** DEPRECATED -- Use `Object::builtin("input")` instead. */
464410
Object theInputFunction() {
465-
result = BuiltinFunctionObject::input()
411+
result = Object::builtin("input")
466412
}
467413

468-
/** DEPRECATED -- Use `BuiltinFunctionObject::locals()` instead. */
414+
/** DEPRECATED -- Use `Object::builtin("locals")` instead. */
469415
Object theLocalsFunction() {
470-
result = BuiltinFunctionObject::locals()
416+
result = Object::builtin("locals")
471417
}
472418

473-
/** DEPRECATED -- Use `BuiltinFunctionObject::globals()` instead. */
419+
/** DEPRECATED -- Use `Object::builtin("globals")()` instead. */
474420
Object theGlobalsFunction() {
475-
result = BuiltinFunctionObject::globals()
421+
result = Object::builtin("globals")
476422
}
477423

478-
/** DEPRECATED -- Use `BuiltinFunctionObject::sysExit()` instead. */
424+
/** DEPRECATED -- Use `Object::builtin("sysExit()` instead. */
479425
Object theExitFunctionObject() {
480-
result = BuiltinFunctionObject::sysExit()
426+
result = ModuleObject::named("sys").attr("exit")
481427
}
482428

python/ql/src/semmle/python/values/StringAttributes.qll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ predicate tracked_object(ControlFlowNode obj, string attr) {
1818
}
1919

2020
predicate open_file(Object obj) {
21-
obj.(CallNode).getFunction().refersTo(BuiltinFunctionObject::open())
21+
obj.(CallNode).getFunction().refersTo(Object::builtin("open"))
2222
}
2323

2424
predicate string_attribute_any(ControlFlowNode n, string attr) {
@@ -28,7 +28,7 @@ predicate string_attribute_any(ControlFlowNode n, string attr) {
2828
if major_version() = 2 then
2929
input = Object::builtin("raw_input")
3030
else
31-
input = BuiltinFunctionObject::input()
31+
input = Object::builtin("input")
3232
)
3333
or
3434
attr = "file-input" and

0 commit comments

Comments
 (0)