Skip to content

Commit 9b1fc2d

Browse files
authored
Merge pull request #50 from bix0r/fix-solrQuery-types-v3
Fix solr query types
2 parents 053ab59 + fcfa3d1 commit 9b1fc2d

File tree

5 files changed

+187
-10
lines changed

5 files changed

+187
-10
lines changed

NEWS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
- Fix compile error: libcurl on linux multiarch support (#46)
22
- Fix SegFault in SolrClient::optimize() (debug mode)
3+
- Fix parsed parameter types (#37)

src/php7/php_solr_collapse_function.c

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,11 +178,23 @@ PHP_METHOD(SolrCollapseFunction, setSize)
178178
{
179179
solr_char_t *key = "size", *arg;
180180
COMPAT_ARG_SIZE_T key_len = sizeof("size"), arg_len;
181+
zval *tmp;
181182

182-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &arg, &arg_len) == FAILURE) {
183+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &tmp) == FAILURE) {
183184
RETURN_NULL();
184185
}
185186

187+
if (Z_TYPE_P(tmp) == IS_LONG) {
188+
convert_to_string(tmp);
189+
}
190+
191+
if (Z_TYPE_P(tmp) != IS_STRING) {
192+
solr_throw_exception(solr_ce_SolrIllegalArgumentException, "Argument 1 must be an int", SOLR_ERROR_4000, SOLR_FILE_LINE_FUNC);
193+
}
194+
195+
arg = Z_STRVAL_P(tmp);
196+
arg_len = Z_STRLEN_P(tmp);
197+
186198
if (solr_solrfunc_update_string(getThis(), key, key_len, (solr_char_t *)arg, arg_len) == FAILURE) {
187199
php_error_docref(NULL, E_ERROR, "Error assigning field");
188200
RETURN_NULL();

src/php7/php_solr_dismax_query.c

Lines changed: 56 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -429,12 +429,25 @@ PHP_METHOD(SolrDisMaxQuery, setPhraseSlop)
429429
int add_result = -1;
430430
solr_char_t *pvalue = NULL;
431431
COMPAT_ARG_SIZE_T pvalue_len = 0;
432+
zval *tmp;
432433

433-
if(zend_parse_parameters(ZEND_NUM_ARGS(), "s", &pvalue, &pvalue_len) == FAILURE)
434+
if(zend_parse_parameters(ZEND_NUM_ARGS(), "z", &tmp) == FAILURE)
434435
{
435436
php_error_docref(NULL, E_WARNING, "Invalid parameters");
436437
RETURN_NULL();
437438
}
439+
440+
if (Z_TYPE_P(tmp) == IS_LONG) {
441+
convert_to_string(tmp);
442+
}
443+
444+
if (Z_TYPE_P(tmp) != IS_STRING) {
445+
solr_throw_exception(solr_ce_SolrIllegalArgumentException, "Argument 1 must be an int", SOLR_ERROR_4000, SOLR_FILE_LINE_FUNC);
446+
}
447+
448+
pvalue = Z_STRVAL_P(tmp);
449+
pvalue_len = Z_STRLEN_P(tmp);
450+
438451
add_result = solr_add_or_set_normal_param(getThis(), pname, pname_len, pvalue, pvalue_len, 0);
439452

440453
if(add_result == FAILURE)
@@ -455,12 +468,25 @@ PHP_METHOD(SolrDisMaxQuery, setQueryPhraseSlop)
455468
int add_result = -1;
456469
solr_char_t *pvalue = NULL;
457470
COMPAT_ARG_SIZE_T pvalue_len = 0;
471+
zval *tmp;
458472

459-
if(zend_parse_parameters(ZEND_NUM_ARGS(), "s", &pvalue, &pvalue_len) == FAILURE)
473+
if(zend_parse_parameters(ZEND_NUM_ARGS(), "z", &tmp) == FAILURE)
460474
{
461475
php_error_docref(NULL, E_WARNING, "Invalid parameters");
462476
RETURN_NULL();
463477
}
478+
479+
if (Z_TYPE_P(tmp) == IS_LONG) {
480+
convert_to_string(tmp);
481+
}
482+
483+
if (Z_TYPE_P(tmp) != IS_STRING) {
484+
solr_throw_exception(solr_ce_SolrIllegalArgumentException, "Argument 1 must be an int", SOLR_ERROR_4000, SOLR_FILE_LINE_FUNC);
485+
}
486+
487+
pvalue = Z_STRVAL_P(tmp);
488+
pvalue_len = Z_STRLEN_P(tmp);
489+
464490
add_result = solr_add_or_set_normal_param(getThis(), pname, pname_len, pvalue, pvalue_len, 0);
465491

466492
if(add_result == FAILURE)
@@ -774,12 +800,25 @@ PHP_METHOD(SolrDisMaxQuery, setBigramPhraseSlop)
774800
int add_result = -1;
775801
solr_char_t *pvalue = NULL;
776802
COMPAT_ARG_SIZE_T pvalue_len = 0;
803+
zval *tmp;
777804

778-
if(zend_parse_parameters(ZEND_NUM_ARGS(), "s", &pvalue, &pvalue_len) == FAILURE)
805+
if(zend_parse_parameters(ZEND_NUM_ARGS(), "z", &tmp) == FAILURE)
779806
{
780807
php_error_docref(NULL, E_WARNING, "Invalid parameters");
781808
RETURN_NULL();
782809
}
810+
811+
if (Z_TYPE_P(tmp) == IS_LONG) {
812+
convert_to_string(tmp);
813+
}
814+
815+
if (Z_TYPE_P(tmp) != IS_STRING) {
816+
solr_throw_exception(solr_ce_SolrIllegalArgumentException, "Argument 1 must be an int", SOLR_ERROR_4000, SOLR_FILE_LINE_FUNC);
817+
}
818+
819+
pvalue = Z_STRVAL_P(tmp);
820+
pvalue_len = Z_STRLEN_P(tmp);
821+
783822
add_result = solr_add_or_set_normal_param(getThis(), pname, pname_len, pvalue, pvalue_len, 0);
784823

785824
if(add_result == FAILURE)
@@ -883,12 +922,25 @@ PHP_METHOD(SolrDisMaxQuery, setTrigramPhraseSlop)
883922
int add_result = -1;
884923
solr_char_t *pvalue = NULL;
885924
COMPAT_ARG_SIZE_T pvalue_len = 0;
925+
zval *tmp;
886926

887-
if(zend_parse_parameters(ZEND_NUM_ARGS(), "s", &pvalue, &pvalue_len) == FAILURE)
927+
if(zend_parse_parameters(ZEND_NUM_ARGS(), "z", &tmp) == FAILURE)
888928
{
889929
php_error_docref(NULL, E_WARNING, "Invalid parameters");
890930
RETURN_NULL();
891931
}
932+
933+
if (Z_TYPE_P(tmp) == IS_LONG) {
934+
convert_to_string(tmp);
935+
}
936+
937+
if (Z_TYPE_P(tmp) != IS_STRING) {
938+
solr_throw_exception(solr_ce_SolrIllegalArgumentException, "Argument 1 must be an int", SOLR_ERROR_4000, SOLR_FILE_LINE_FUNC);
939+
}
940+
941+
pvalue = Z_STRVAL_P(tmp);
942+
pvalue_len = Z_STRLEN_P(tmp);
943+
892944
add_result = solr_add_or_set_normal_param(getThis(), pname, pname_len, pvalue, pvalue_len, 0);
893945

894946
if(add_result == FAILURE)

src/php7/php_solr_query.c

Lines changed: 70 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -130,14 +130,27 @@ PHP_METHOD(SolrQuery, setStart)
130130
COMPAT_ARG_SIZE_T param_name_len = sizeof("start")-1;
131131
solr_char_t *param_value = NULL;
132132
COMPAT_ARG_SIZE_T param_value_len = 0;
133+
zval *tmp;
133134

134-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &param_value, &param_value_len) == FAILURE) {
135+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &tmp) == FAILURE) {
135136

136137
php_error_docref(NULL, E_WARNING, "Invalid parameters");
137138

138139
RETURN_NULL();
139140
}
140141

142+
if (Z_TYPE_P(tmp) == IS_LONG) {
143+
convert_to_string(tmp);
144+
}
145+
146+
if (Z_TYPE_P(tmp) != IS_STRING) {
147+
solr_throw_exception(solr_ce_SolrIllegalArgumentException, "Argument 1 must be an int", SOLR_ERROR_4000, SOLR_FILE_LINE_FUNC);
148+
RETURN_NULL();
149+
}
150+
151+
param_value = Z_STRVAL_P(tmp);
152+
param_value_len = Z_STRLEN_P(tmp);
153+
141154
if (solr_set_normal_param(getThis(), param_name, param_name_len, param_value, param_value_len) == FAILURE)
142155
{
143156
RETURN_NULL();
@@ -155,14 +168,27 @@ PHP_METHOD(SolrQuery, setRows)
155168
COMPAT_ARG_SIZE_T param_name_len = sizeof("rows")-1;
156169
solr_char_t *param_value = NULL;
157170
COMPAT_ARG_SIZE_T param_value_len = 0;
171+
zval *tmp = NULL;
158172

159-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &param_value, &param_value_len) == FAILURE) {
173+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &tmp) == FAILURE) {
160174

161175
php_error_docref(NULL, E_WARNING, "Invalid parameters");
162176

163177
RETURN_NULL();
164178
}
165179

180+
if (Z_TYPE_P(tmp) == IS_LONG) {
181+
convert_to_string(tmp);
182+
}
183+
184+
if (Z_TYPE_P(tmp) != IS_STRING) {
185+
solr_throw_exception(solr_ce_SolrIllegalArgumentException, "Argument 1 must be an int", SOLR_ERROR_4000, SOLR_FILE_LINE_FUNC);
186+
RETURN_NULL();
187+
}
188+
189+
param_value = Z_STRVAL_P(tmp);
190+
param_value_len = Z_STRLEN_P(tmp);
191+
166192
if (solr_set_normal_param(getThis(), param_name, param_name_len, param_value, param_value_len) == FAILURE)
167193
{
168194
RETURN_NULL();
@@ -326,14 +352,27 @@ PHP_METHOD(SolrQuery, setTimeAllowed)
326352
COMPAT_ARG_SIZE_T param_name_len = sizeof("timeAllowed")-1;
327353
solr_char_t *param_value = NULL;
328354
COMPAT_ARG_SIZE_T param_value_len = 0;
355+
zval *tmp = NULL;
329356

330-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &param_value, &param_value_len) == FAILURE) {
357+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &tmp) == FAILURE) {
331358

332359
php_error_docref(NULL, E_WARNING, "Invalid parameters");
333360

334361
RETURN_NULL();
335362
}
336363

364+
if (Z_TYPE_P(tmp) == IS_LONG) {
365+
convert_to_string(tmp);
366+
}
367+
368+
if (Z_TYPE_P(tmp) != IS_STRING) {
369+
solr_throw_exception(solr_ce_SolrIllegalArgumentException, "Argument 1 must be an int", SOLR_ERROR_4000, SOLR_FILE_LINE_FUNC);
370+
RETURN_NULL();
371+
}
372+
373+
param_value = Z_STRVAL_P(tmp);
374+
param_value_len = Z_STRLEN_P(tmp);
375+
337376
if (solr_set_normal_param(getThis(), param_name, param_name_len, param_value, param_value_len) == FAILURE)
338377
{
339378
php_error_docref(NULL, E_WARNING, "Error setting parameter %s=%s ", param_name, param_value);
@@ -1343,14 +1382,27 @@ PHP_METHOD(SolrQuery, setGroupOffset)
13431382
int param_name_len = sizeof("group.offset")-1;
13441383
solr_char_t *param_value = NULL;
13451384
COMPAT_ARG_SIZE_T param_value_len = 0;
1385+
zval *tmp = NULL;
13461386

1347-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &param_value, &param_value_len) == FAILURE) {
1387+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &tmp) == FAILURE) {
13481388

13491389
php_error_docref(NULL, E_WARNING, "Invalid parameters");
13501390

13511391
RETURN_NULL();
13521392
}
13531393

1394+
if (Z_TYPE_P(tmp) == IS_LONG) {
1395+
convert_to_string(tmp);
1396+
}
1397+
1398+
if (Z_TYPE_P(tmp) != IS_STRING) {
1399+
solr_throw_exception(solr_ce_SolrIllegalArgumentException, "Argument 1 must be an int", SOLR_ERROR_4000, SOLR_FILE_LINE_FUNC);
1400+
RETURN_NULL();
1401+
}
1402+
1403+
param_value = Z_STRVAL_P(tmp);
1404+
param_value_len = Z_STRLEN_P(tmp);
1405+
13541406
if (solr_add_normal_param(getThis(), param_name, param_name_len, param_value, param_value_len) == FAILURE)
13551407
{
13561408
php_error_docref(NULL, E_WARNING, "Unable to add param value %s to %s ", param_value, param_name);
@@ -1917,14 +1969,27 @@ PHP_METHOD(SolrQuery, setExpandRows)
19171969
COMPAT_ARG_SIZE_T param_name_len = sizeof("expand.rows")-1;
19181970
solr_char_t *param_value = NULL;
19191971
COMPAT_ARG_SIZE_T param_value_len = 0;
1972+
zval *tmp = NULL;
19201973

1921-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &param_value, &param_value_len) == FAILURE) {
1974+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &tmp) == FAILURE) {
19221975

19231976
php_error_docref(NULL, E_WARNING, "Invalid parameters");
19241977

19251978
RETURN_NULL();
19261979
}
19271980

1981+
if (Z_TYPE_P(tmp) == IS_LONG) {
1982+
convert_to_string(tmp);
1983+
}
1984+
1985+
if (Z_TYPE_P(tmp) != IS_STRING) {
1986+
solr_throw_exception(solr_ce_SolrIllegalArgumentException, "Argument 1 must be an int", SOLR_ERROR_4000, SOLR_FILE_LINE_FUNC);
1987+
RETURN_NULL();
1988+
}
1989+
1990+
param_value = Z_STRVAL_P(tmp);
1991+
param_value_len = Z_STRLEN_P(tmp);
1992+
19281993
if (solr_set_normal_param(getThis(), param_name, param_name_len, param_value, param_value_len) == FAILURE)
19291994
{
19301995
RETURN_NULL();
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
--TEST--
2+
SolrQuery - Strict type parameters without BC break
3+
--FILE--
4+
<?php declare(strict_types=1);
5+
6+
$query = new SolrQuery('lucene');
7+
8+
$query->setStart(1);
9+
$query->setRows(2);
10+
$query->setTimeAllowed(300);
11+
$query->setGroupOffset(1);
12+
$query->setExpandRows(1);
13+
14+
echo $query . "\n";
15+
16+
// Now with strings
17+
$query = new SolrQuery('lucene');
18+
$query->setStart('1anystring'); // we don't do any checking
19+
$query->setRows('2');
20+
$query->setTimeAllowed('300');
21+
$query->setGroupOffset('1');
22+
$query->setExpandRows('1');
23+
24+
echo $query . "\n";
25+
26+
try { $query->setStart(true); } catch (SolrIllegalArgumentException $e) { echo $e->getMessage() . "\n"; }
27+
28+
$collapse = new SolrCollapseFunction();
29+
$collapse->setSize(1);
30+
31+
echo $collapse . "\n";
32+
33+
$d = new SolrDisMaxQuery('lucene');
34+
$d->setPhraseSlop(2);
35+
$d->setQueryPhraseSlop(3);
36+
$d->setBigramPhraseSlop(4);
37+
$d->setTrigramPhraseSlop(5);
38+
39+
echo $d . "\n";
40+
41+
--EXPECT--
42+
q=lucene&start=1&rows=2&timeAllowed=300&group.offset=1&expand.rows=1
43+
q=lucene&start=1anystring&rows=2&timeAllowed=300&group.offset=1&expand.rows=1
44+
Argument 1 must be an int
45+
{!collapse size=1}
46+
q=lucene&defType=edismax&ps=2&qs=3&ps2=4&ps3=5
47+

0 commit comments

Comments
 (0)