Browse Source

Avoid using php_date_get_date_ce() in case date extension is not
available.

Bo Yang 7 years ago
parent
commit
1a549d9a90
1 changed files with 15 additions and 2 deletions
  1. 15 2
      php/ext/google/protobuf/message.c

+ 15 - 2
php/ext/google/protobuf/message.c

@@ -1123,8 +1123,21 @@ PHP_METHOD(Timestamp, fromDateTime) {
   zval* datetime;
   zval member;
 
-  if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &datetime,
-                            php_date_get_date_ce()) == FAILURE) {
+  if (zend_parse_parameters(
+          ZEND_NUM_ARGS() TSRMLS_CC, "z", &datetime) == FAILURE) {
+    return;
+  }
+
+  zend_class_entry* ce = Z_OBJCE_P(datetime);
+  PHP_PROTO_CE_DECLARE datetime_ce;
+  if (php_proto_zend_lookup_class("\\Datetime", 9, &datetime_ce) ==
+      FAILURE) {
+    zend_error(E_ERROR, "Make sure date extension is enabled.");
+    return;
+  }
+
+  if (!instanceof_function(PHP_PROTO_CE_UNREF(datetime_ce), ce TSRMLS_CC)) {
+    zend_error(E_USER_ERROR, "Expect Datetime.");
     return;
   }