Source: dictd
Version: 1.12.1+dfsg-4
Severity: important
Tags: patch

How to reproduce the problem.

Perform the following tests.

TEST №1
dict -h dict.bibleonline.ru -M "ide"
----------
1 definition found

From Греческо-русский лексикон Нового Завета [ell-rus_strong]:

  Content-type: text/html; charset=utf-8
  Content-transfer-encoding: 8bit

  2396  ἴδε   ide
  вот, се, смотри, посмотри;<BR><I TITLE='второе лицо, единственное число,
повелительное наклонение, действительный залог от' STYLE='COLOR: GREEN;
CURSOR:DEFAULT'>2-е л. ед.ч. повел. действ. от</I> 1492 (εἰδῶ, οἶδα).
----------

We got a normal result.

TEST №2
dict -s word -h dict.bibleonline.ru -M "ide"
----------
----------

No result. When you use the -s you have a problem.

TEST №3
dict -s prefix -h dict.bibleonline.ru -M "ide"
----------
From Греческо-русский лексикон Нового Завета [ell-rus_strong]:

  Content-type: text/html; charset=utf-8
  Content-transfer-encoding: 8bit

  2396  ἴδε   ide
  вот, се, смотри, посмотри;<BR><I TITLE='второе лицо, единственное число,
повелительное наклонение, действительный залог от' STYLE='COLOR: GREEN;
CURSOR:DEFAULT'>2-е л. ед.ч. повел. действ. от</I> 1492 (εἰδῶ, οἶδα).
----------

Now, the last two tests without using the -M, to see what should be the
result.

TEST №4
dict -s word -h dict.bibleonline.ru "ide"
----------
From Греческо-русский лексикон Нового Завета [ell-rus_strong]:

  2396  ἴδε   ide
  вот, се, смотри, посмотри;
  2-е л. ед.ч. повел. действ. от 1492 ( {εἰδῶ, οἶδα} ).
----------

TEST №5
dict -s prefix -h dict.bibleonline.ru "ide"
----------
From Греческо-русский лексикон Нового Завета [ell-rus_strong]:

  2396  ἴδε   ide
  вот, се, смотри, посмотри;
  2-е л. ед.ч. повел. действ. от 1492 ( {εἰδῶ, οἶδα} ).

From Греческо-русский лексикон Нового Завета [ell-rus_strong]:

  2397  ἰδέα  idea
  вид (1. наружность, внешность;
  2. разновидность, тип);
  син. 3444 ( {μορφή} ), 4976 ( {σχῆμα} ).
----------

Conclusion: When you use the -M compatible with -s causes that the last
dictionary entry is runaway.

I check this conclusion. I run DICT-server by command:
/usr/sbin/dictd -dnodetach -dinit

I do two tests:
dict -s prefix -h dict.bibleonline.ru -M "ide"
dict -s word -h dict.bibleonline.ru -M "ide"

I can see the result on the DICT-server:
:C: "dict 1.12.1/rf on CYGWIN_NT-5.1 1.7.28(0.271/5/3)"
:M: * prefix "ide" 2
:D: ell-rus_strong "ide" 1
:I: quit: d/m/c = 1/2/108; 1.000r 0.000u 0.000s
:C: "dict 1.12.1/rf on CYGWIN_NT-5.1 1.7.28(0.271/5/3)"
:M: * word "ide" 1
:I: quit: d/m/c = 0/1/903735; 0.000r 0.000u 0.000s

Note: We use the -M option instead --mime, but this is also true for the
long option (--mime) as for the short one (-M).

This should fix it.
Change line 1093 in dict.c to

for (i = cmd_reply.matches + option_mime; i > 0; --i) {

Can you test this and see if it works?
Thanks.

My patch for solving this problem:

---------------------------------------------------------------- 
--- a/dict.c 2018-01-24 01:05:59.531250000 +0600
+++ b/dict.c 2018-01-24 01:07:03.343750000 +0600
@@ -1090,7 +1090,7 @@
         err_internal( __func__,
       "%d matches, but no list\n", cmd_reply.matches );
 
-     for (i = cmd_reply.matches; i > 0; --i) {
+     for (i = cmd_reply.matches + option_mime; i > 0; --i) {
         /* skip MIME header */
         const char *line = lst_nth_get( cmd_reply.data, i );
         arg_List   a;
----------------------------------------------------------------  
--- a/dict.c 2018-01-24 01:05:59.531250000 +0600
+++ b/dict.c    2018-01-24 01:07:03.343750000 +0600
@@ -1090,7 +1090,7 @@
               err_internal( __func__,
                             "%d matches, but no list\n", cmd_reply.matches );
 
-           for (i = cmd_reply.matches; i > 0; --i) {
+           for (i = cmd_reply.matches + option_mime; i > 0; --i) {
               /* skip MIME header */
               const char *line = lst_nth_get( cmd_reply.data, i );
               arg_List   a;

Reply via email to