X11에는 여전히 응용 프로그램 리소스 문자열에 대해 하드 코딩된 제한이 있습니까?

X11에는 여전히 응용 프로그램 리소스 문자열에 대해 하드 코딩된 제한이 있습니까?

xterm(1) 매뉴얼 페이지에는 다음과 같이 명시되어 있습니다.

왜냐하면X 라이브러리의 총 리소스 수에 대한 하드코딩된 제한(최대 400개), 와이드 문자 지원 및 luit가 활성화되면 256색 리소스가 생략됩니다. 일관되지 않은 동작 외에도 일부 리소스만 허용되는 경우 정확한 컷오프를 결정하기 어렵고 리소스 수가 제한을 초과하면 X 라이브러리가 충돌하는 경향이 있습니다. 팔레트는 여전히 동일한 기본값으로 초기화되며 제어 시퀀스를 통해 수정할 수 있습니다.

이 정보는 오래된 것 같습니다. X.Org 1.12(X11R7)와 같은 최신 X 구현에서 이것이 문제인지(또는 더 이상 문제가 아닌지) 확인할 수 있는 사람이 있습니까? 이 제한 사항이 여전히 존재한다면 X11 소스 코드에서 이를 찾아야 하는 사람은 누구입니까?

답변1

당신은 의미합니까?xorg/lib/libXt/Resource.c

#define MAXRESOURCES  400

나중에같은 파일:

} else if (num_resources >= MAXRESOURCES) {
    XtAppWarningMsg(XtWidgetToApplicationContext(widget),
    "invalidResourceCount","getResources",XtCXtToolkitError,
          "too many resources",
      (String *)NULL, (Cardinal *)NULL);
return NULL;

Xorg 개발자는 응용 프로그램이 거의 없기 때문에 이를 변경할 가능성이 없습니다.할 수 있다너무 많은 자원을 사용하십시오.

xterm의 원래 256색 구성표(1999년) 각 색상에 별도의 리소스를 할당합니다.

변경 로그패치 #188 - 2004/5/12 - XFree86 4.4.99.6설명하다:

  • 16개 이상의 색상은 일반적으로 X 리소스가 아니도록 256개 색상과 88개 색상의 초기화를 수정합니다. 이는 256가지 색상과 색상이 모두 구성될 때 xterm을 손상시키는 Xt의 하드 코딩된 제한 사항을 해결합니다(Noah Friedman의 보고).

보고서에는 이를 언급되어 있지만 luit그 외에도 UTF-8, 로케일 등에 대한 다른 리소스가 있습니다. 때로는 일부 조정이 필요합니다.패치 #191 - 2004/6/6 - XFree86 4.4.99.7

  • OPT_COLOR_RES2패치 #188에 도입된 가짜 리소스 테이블이 비어 있을 때 컴파일되지 않도록 ifdef를 수정합니다 . 이는 gcc에서 작동하는 일입니다(Joel Konkle-Parker의 보고).

그리고패치 #250 - 2009/10/13:

  • 88색 모델용 리소스를 활성화하여 패치 #188에 대한 해결 방법을 개선했습니다.
  • color16부터 color255까지의 자원의 제한된 가용성은 패치 #188(Ubuntu #438850)에 설명된 대로 xterm 맨페이지에 문서화되어 있습니다.

이 프로그램은 여전히 ​​256개의 색상 리소스(UTF-8 없음)를 사용하여 구축할 수 있지만 지금은 그 빈도가 줄어듭니다.

온전성 검사와 마찬가지로 xterm에는 다음 블록이 있습니다(디버깅할 때 켜짐).

TRACE(("VTInitialize wnew %p, %d / %d resources\n",
       (void *) wnew, XtNumber(xterm_resources), MAXRESOURCES));
assert(XtNumber(xterm_resources) < MAXRESOURCES);

추적 로그 표시

VTInitialize wnew 0xb98a90, 232 / 400 resource

따라서 추가로 240(256-16) 컬러 자원을 사용하지 않으므로 즉각적인 자원 고갈 위험이 없습니다.

관련 정보