WCHAR* someString = L"SomeString\n";
WCHAR s1[MAX_PATH];
// I'm sure this is right code.
StringCchCopyW(s1, _countof(s1), someString);
// But I'm not sure about these example.
StringCchCopyW(s1 + 100, _countof(s1) - 100, someString); // Is it right?
StringCchCopyW(s1 + 100, _countof(s1), someString); // Is it right?
// How about these?
StringCchCatW(s1, _countof(s1) - wcslen(s1), someString); // Is it right?
StringCchCatW(s1, _countof(s1), someString); // Is it right?
1
A
답변
1
모든 기능에있어 한 가지 잘못된 점은 반환 값을 확인하는 것을 잊었습니다. String Safe 함수조차도 실패 할 수 있으며 그렇게하면 코드에서 자동으로 종료됩니다. 문자열 함수의 반환 값은 이고 항상이어야합니다. 그렇지 않으면 보안 구멍을 열었습니다.
그 외에도 미묘한 문제가 있으므로 결정적인 예 또는 아니오로 답하기가 정말 어렵습니다.
StringCchCopyW(s1, _countof(s1), someString);
이것은 정확하며 무시 된 반환 값 이외의 실제 문제는 없습니다.
StringCchCopyW(s1 + 100, _countof(s1) - 100, someString); // Is it right?
답변하기가 어렵습니다. 이 작업을 수행하면 s1+100
은 유효한 문자열 객체를 가리키지 만 s1에는 아무런 영향을주지 않습니다. 보안 구멍을 열지는 않습니다.
StringCchCopyW(s1 + 100, _countof(s1), someString); // Is it right?
이것은 매우 잘못되었습니다. 유효한 문자의 수는 MAX_PATH
이지만, MAX_PATH-100
자의 버퍼가 있습니다. someString
이 충분히 길면 버퍼 오버 플로우가 발생할 수 있습니다.
StringCchCatW(s1, _countof(s1) - wcslen(s1), someString); // Is it right?
이것은 잘못되었지만 그렇게 위험하지는 않습니다. s1의 길이가 실제로는 그보다 작다고보고하고 있습니다. 오버플로는 발생하지 않지만 유효한 문자열은 추가되지 않습니다.
StringCchCatW(s1, _countof(s1), someString); // Is it right?
s1의 문자열이 올바른 경우에 한해 올바른 내용입니다. s1에 유효한 문자열이 없으면 함수가 잘못 실행될 수 있습니다.
관련 문제
- 1. 안전 나누기 기능
- 2. 기능 C++ (안전 코드)
- 3. UIWebView 안전/개인 정보 보호
- 4. 라이센스 방식 스푸핑 안전 및 취소 기능
- 5. Silverlight 3.0 "Push"기능 정보
- 6. xcode의 단축키/기능 정보 4
- 7. Windows7의 자동 실행 기능 정보
- 8. C++ DLL의 기능 정보 추출
- 9. PHP 문자열 기능
- 10. PHP는 문자열 별도의 기능
- 11. 문자열. 기능 문제를 대체하십시오!
- 12. 앵커의 "title"속성에 대한 형식/안전 문자열
- 13. Microsoft의 Dia2Lib에서 0x806D0005의 HRESULT
- 14. 자바에 대한 기본 정보 문자열
- 15. 파이썬 - 추출 중요한 문자열 정보
- 16. NHibernate 설정 연결 문자열 정보
- 17. 안전
- 18. 동작 스크립트 문자열 마스킹 기능
- 19. 더 많은 문자열 일치 기능
- 20. IBM ICU - 문자열 변환 기능
- 21. Microsoft의 코드 라이브러리 이해
- 22. Microsoft의 Unity 및 PowerShell
- 23. Microsoft의 조롱 프레임 워크?
- 24. 구글의 위치 정보 API와 "내 위치"기능
- 25. iOS 4.0의 위치 정보 멀티 태스킹 기능
- 26. 유형 안전 및 nhibernate
- 27. 분산 소스 제어에 대한 Microsoft의 계획은 무엇입니까?
- 28. Microsoft의 UI 자동화 자습서/참조
- 29. Open XML에 관한 Microsoft의 문의
- 30. 왜 Microsoft의 _wspawnv가 EINVAL을 반환합니까?
분명합니다. 감사. – Benjamin
그건 그렇고, 당신은 VsVim을 개발 한 사람입니다! 그것은 굉장. 인생이 바뀌고 있습니다 :) – Benjamin
@ 벤자민, VsVim을 즐기고 있다는 소식을 듣고 기쁩니다! – JaredPar