Browse Source

Don't allow negative values for `OS.delay_usec()`/`OS.delay_msec()`

This closes #46190.

(cherry picked from commit 76f1f9b3c56afff2aa144468d8e33f590d6822cd)
Hugo Locurcio 4 years ago
parent
commit
9f236d48e6
3 changed files with 14 additions and 8 deletions
  1. 10 4
      core/bind/core_bind.cpp
  2. 2 2
      core/bind/core_bind.h
  3. 2 2
      doc/classes/OS.xml

+ 10 - 4
core/bind/core_bind.cpp

@@ -942,13 +942,19 @@ uint64_t _OS::get_system_time_msecs() const {
 	return OS::get_singleton()->get_system_time_msecs();
 }
 
-void _OS::delay_usec(uint32_t p_usec) const {
-
+/** This method uses a signed argument for better error reporting as it's used from the scripting API. */
+void _OS::delay_usec(int p_usec) const {
+	ERR_FAIL_COND_MSG(
+			p_usec < 0,
+			vformat("Can't sleep for %d microseconds. The delay provided must be greater than or equal to 0 microseconds.", p_usec));
 	OS::get_singleton()->delay_usec(p_usec);
 }
 
-void _OS::delay_msec(uint32_t p_msec) const {
-
+/** This method uses a signed argument for better error reporting as it's used from the scripting API. */
+void _OS::delay_msec(int p_msec) const {
+	ERR_FAIL_COND_MSG(
+			p_msec < 0,
+			vformat("Can't sleep for %d milliseconds. The delay provided must be greater than or equal to 0 milliseconds.", p_msec));
 	OS::get_singleton()->delay_usec(int64_t(p_msec) * 1000);
 }
 

+ 2 - 2
core/bind/core_bind.h

@@ -308,8 +308,8 @@ public:
 	uint64_t get_static_memory_peak_usage() const;
 	uint64_t get_dynamic_memory_usage() const;
 
-	void delay_usec(uint32_t p_usec) const;
-	void delay_msec(uint32_t p_msec) const;
+	void delay_usec(int p_usec) const;
+	void delay_msec(int p_msec) const;
 	uint32_t get_ticks_msec() const;
 	uint64_t get_ticks_usec() const;
 	uint32_t get_splash_tick_msec() const;

+ 2 - 2
doc/classes/OS.xml

@@ -56,7 +56,7 @@
 			<argument index="0" name="msec" type="int">
 			</argument>
 			<description>
-				Delay execution of the current thread by [code]msec[/code] milliseconds.
+				Delay execution of the current thread by [code]msec[/code] milliseconds. [code]usec[/code] must be greater than or equal to [code]0[/code]. Otherwise, [method delay_msec] will do nothing and will print an error message.
 			</description>
 		</method>
 		<method name="delay_usec" qualifiers="const">
@@ -65,7 +65,7 @@
 			<argument index="0" name="usec" type="int">
 			</argument>
 			<description>
-				Delay execution of the current thread by [code]usec[/code] microseconds.
+				Delay execution of the current thread by [code]usec[/code] microseconds. [code]usec[/code] must be greater than or equal to [code]0[/code]. Otherwise, [method delay_usec] will do nothing and will print an error message.
 			</description>
 		</method>
 		<method name="dump_memory_to_file">