fix nul termination

This commit is contained in:
John Smith 2023-08-20 11:23:17 -04:00
parent 964741463e
commit 1a3c87f9f1

View File

@ -80,14 +80,14 @@ pub async fn txt_lookup<S: AsRef<str>>(host: S) -> EyreResult<Vec<String>> {
if #[cfg(target_os = "windows")] { if #[cfg(target_os = "windows")] {
use core::ffi::c_void; use core::ffi::c_void;
use windows::core::{PSTR,PCSTR}; use windows::core::{PSTR,PCSTR};
use std::ffi::CStr; use std::ffi::{CStr, CString};
use windows::Win32::NetworkManagement::Dns::{DnsQuery_UTF8, DnsFree, DNS_TYPE_TEXT, DNS_QUERY_STANDARD, DNS_RECORDA, DnsFreeRecordList}; use windows::Win32::NetworkManagement::Dns::{DnsQuery_UTF8, DnsFree, DNS_TYPE_TEXT, DNS_QUERY_STANDARD, DNS_RECORDA, DnsFreeRecordList};
let mut out = Vec::new(); let mut out = Vec::new();
unsafe { unsafe {
let mut p_query_results: *mut DNS_RECORDA = core::ptr::null_mut(); let mut p_query_results: *mut DNS_RECORDA = core::ptr::null_mut();
let host = host.as_ref().to_string(); let host = CString::new(host.as_ref()).wrap_err("invalid host string")?;
DnsQuery_UTF8(PCSTR::from_raw(host.as_ptr()), DNS_TYPE_TEXT, DNS_QUERY_STANDARD, None, &mut p_query_results as *mut *mut DNS_RECORDA, None).wrap_err("Failed to resolve TXT record")?; DnsQuery_UTF8(PCSTR::from_raw(host.as_bytes_with_nul().as_ptr()), DNS_TYPE_TEXT, DNS_QUERY_STANDARD, None, &mut p_query_results as *mut *mut DNS_RECORDA, None).wrap_err("Failed to resolve TXT record")?;
let mut p_record: *mut DNS_RECORDA = p_query_results; let mut p_record: *mut DNS_RECORDA = p_query_results;
while !p_record.is_null() { while !p_record.is_null() {
@ -138,7 +138,7 @@ pub async fn ptr_lookup(ip_addr: IpAddr) -> EyreResult<String> {
if #[cfg(target_os = "windows")] { if #[cfg(target_os = "windows")] {
use core::ffi::c_void; use core::ffi::c_void;
use windows::core::{PSTR,PCSTR}; use windows::core::{PSTR,PCSTR};
use std::ffi::CStr; use std::ffi::{CStr, CString};
use windows::Win32::NetworkManagement::Dns::{DnsQuery_UTF8, DnsFree, DNS_TYPE_PTR, DNS_QUERY_STANDARD, DNS_RECORDA, DnsFreeRecordList}; use windows::Win32::NetworkManagement::Dns::{DnsQuery_UTF8, DnsFree, DNS_TYPE_PTR, DNS_QUERY_STANDARD, DNS_RECORDA, DnsFreeRecordList};
let host = match ip_addr { let host = match ip_addr {
@ -157,7 +157,8 @@ pub async fn ptr_lookup(ip_addr: IpAddr) -> EyreResult<String> {
unsafe { unsafe {
let mut p_query_results: *mut DNS_RECORDA = core::ptr::null_mut(); let mut p_query_results: *mut DNS_RECORDA = core::ptr::null_mut();
DnsQuery_UTF8(PCSTR::from_raw(host.as_ptr()), DNS_TYPE_PTR, DNS_QUERY_STANDARD, None, &mut p_query_results as *mut *mut DNS_RECORDA, None).wrap_err("Failed to resolve PTR record")?; let host = CString::new(host).wrap_err("invalid host string")?;
DnsQuery_UTF8(PCSTR::from_raw(host.as_bytes_with_nul().as_ptr()), DNS_TYPE_PTR, DNS_QUERY_STANDARD, None, &mut p_query_results as *mut *mut DNS_RECORDA, None).wrap_err("Failed to resolve PTR record")?;
let mut p_record: *mut DNS_RECORDA = p_query_results; let mut p_record: *mut DNS_RECORDA = p_query_results;
while !p_record.is_null() { while !p_record.is_null() {