On Wed, Mar 29, 2006 at 06:53:18PM +0400, Stanislav Ievlev wrote:
> У меня так часто валится apt-pipe что я решил сделать профилактический
> проход по apt'у - понятное дело отфильтровывая его многочисленные
> неисправимые преимущества.

Ладно, раз уж пошла такая пьянка...
Сижу отсматриваю изменения между apt-0.5.15cnc6 и apt-0.5.15cnc7.
Из _добавлений_ в новой версии, по которым сразу виден apt-rpm:

=======
if (I->Owner->Status == pkgAcquire::Item::StatIdle &&
    strncmp(I->URI.c_str(), Workers->Config->PreferredURI.c_str(),
            Workers->Config->PreferredURI.length()) == 0)

Перевожу: для того, чтобы определить, является ли одна C++-строка
префиксом другой, производится конвертация в C для того, чтобы вызвать
strncmp.

=======
   if ((Flags & HasPreferredURI) == HasPreferredURI)
      strcat(End,"Has-Preferred-URI: true\n");

End - это буфер на стеке классического apt-ового размера (300 символов),
а добавленный strcat не первый и не последний направлен в этот буфер.

=======
        case 679:
        {
           char S[1024];
           snprintf(S,sizeof(S),"179 Preferred URI\nPreferredURI: %s\n\n",
                    PreferredURI().c_str());
           if (write(STDOUT_FILENO,S,strlen(S)) != (signed)strlen(S))
              exit(100);
           break;
        }

Разумеется, PreferredURI() это урл произвольной длины.

=======
        else if (Opts->Value == "-v") {
           rpmIncreaseVerbosity();
        } else if (Opts->Value == "-vv") {
           rpmIncreaseVerbosity();
           rpmIncreaseVerbosity();
        } else if (Opts->Value == "-vvv") {
           rpmIncreaseVerbosity();
           rpmIncreaseVerbosity();
           rpmIncreaseVerbosity();
        }

Просто красота.

=======

      // CNC:2004-09-23 - Try to handle unknown file items.
      unsigned int Length = strlen(*I);
      char S[300];
      if (Length >= sizeof(S))
        continue;
      strcpy(S,*I);

      if (S[0] == '/')
      {

Попробуем обработать файл... если его имя не слишком длинное.

=======

Так, теперь смотрю что изменилось между apt-0.5.15cnc7 и apt-0.5.15org2

=======

-   char S[1024] = "";
-   char *End = S;
-   
-   End += snprintf(S,sizeof(S),"200 URI Start\nURI: %s\n",Queue->Uri.c_str());
+
+   ostringstream s;
+
+   s << "200 URI Start\nURI: " << Queue->Uri << "\n";
    if (Res.Size != 0)
-      End += snprintf(End,sizeof(S)-4 - (End - S),"Size: %lu\n",Res.Size);
+      s << "Size: " << Res.Size << "\n";

Не может быть.  Не верю своим глазам.

=======

-   char S[1024] = "";
-   char *End = S;
-   
-   End += snprintf(S,sizeof(S),"201 URI Done\nURI: %s\n",Queue->Uri.c_str());
+   ostringstream s;
 
+   s << "201 URI Done\nURI: " << Queue->Uri << "\n";
+   
    if (Res.Filename.empty() == false)
-      End += snprintf(End,sizeof(S)-50 - (End - S),"Filename: 
%s\n",Res.Filename.c_str());
+      s << "Filename: " << Res.Filename << "\n";

Продолжаю не верить.

=======

+bool pkgAcqMethod::NeedAuth(string Description,string &User,string &Pass)
+{
+   char S[1024];
+   snprintf(S,sizeof(S),"404 Authenticate\nDescription: %s\n\n",
+           Description.c_str());
+
+   if (write(STDOUT_FILENO,S,strlen(S)) != (signed)strlen(S))
+      exit(100);

Ну вот, снова знакомая картина.  Чудес не бывает.

В общем подозрительных изменений, которые могут сломать обратную
совместимость, оказалось совсем немного.


-- 
ldv

Attachment: pgpI3JVJ1p7ho.pgp
Description: PGP signature

_______________________________________________
Devel-conf mailing list
[email protected]
https://lists.altlinux.org/mailman/listinfo/devel-conf

Ответить